Ответ 1
double someValue = 2.346;
String.Format("{0:0.00}", someValue);
Возможный дубликат:
С# - Как округлить десятичное значение до двух знаков после запятой (для вывода на странице)
Каков наилучший способ округления от двух до двух знаков после запятой, а также зафиксирован ли он на 2 десятичных знака?
Пример: 2,346 → 2,35, 2 → 2,00Я надеюсь избежать чего-то подобного, когда мне нужно преобразовать double в строку, а затем вернуться к двойному, что кажется плохим способом для этого.
double someValue = 2.346;
String.Format("{0:0.00}", someValue);
Обозначьте значение до требуемой точности, а затем отформатируйте его. Всегда предпочитайте версию Math.Round, содержащую параметр округления средней точки. Этот параметр указывает, как обрабатывать средние значения (5) в качестве последней цифры.
Если вы не укажете AwayFromZero как значение параметра, вы получите поведение по умолчанию, которое равно ToEven. Например, используя метод ToEven как метод округления, вы получаете:
Math.Round(2.025,2)==2.02
и
Math.Round(2.035,2)==2.04
используя параметр MidPoint.AwayFromZero:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
и
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
Итак, для нормального округления лучше всего использовать этот код:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);
var str=String.Format("{0:0.00}", result );
double someValue = 2.346;
string displayString = someValue.ToString("0.00");
Обратите внимание, что double.ToString(и поэтому string.Format()) использует середину, округляющуюся от нуля, поэтому 0.125 становится 0.13. Это обычно является желаемым поведением для отображения. Очевидно, что эти строки не должны использоваться для кругового отключения.
Этот метод также не подходит для округления, который требуется в математических вычислениях (где MidpointRounding.ToEven обычно является лучшим подходом). В этом случае следует использовать Math.Round().
Взгляните на Math.Round