Округление до 2 знаков после запятой в С#
У меня есть десятичное число, которое может быть следующим:
189,182
Я хочу округлить до двух знаков после запятой, поэтому выход будет следующим:
189.19
Есть ли встроенные функции для этого в классе Math или что-то еще? Я знаю, что существует функция потолка, но это не похоже на то, что я хочу - она будет округлена до ближайшего int, так что просто "189" в этом случае.
Ответы
Ответ 1
Умножьте на 100, потолок вызовов, разделите на 100, делает то, что, я думаю, вы просите
public static double RoundUp(double input, int places)
{
double multiplier = Math.Pow(10, Convert.ToDouble(places));
return Math.Ceiling(input * multiplier) / multiplier;
}
Использование будет выглядеть так:
RoundUp(189.182, 2);
Это работает, сдвигая десятичную точку вправо на 2 места (так что она находится справа от последних 8), а затем выполняет операцию потолка, а затем переводит десятичную точку обратно в исходное положение.
Ответ 2
Ты можешь использовать:
decimal n = 189.182M;
n = System.Math.Ceiling (n * 100) / 100;
Объяснение различных функций округления можно найти здесь.
Имейте в виду, что подобные формулы все еще ограничены ограниченной точностью типа double
, если это тип, который вы используете (ваш вопрос указан как десятичный, но возможно, вы просто имели в виду значение с плавающей запятой с дробным компонентом, а не с этим конкретным типом). тип).
Например:
double n = 283.79;
n = System.Math.Ceiling (n * 100);
на самом деле даст вам 28380
, а не 283.79
вы ожидаете (а).
Если вы хотите получить точные результаты по всем направлениям, вам определенно следует использовать decimal
тип.
(a) Это связано с тем, что наиболее точное представление двойной точности 283.79
для 283.79
на самом деле:
283.790000000000020463630789891
Этот дополнительный (по общему признанию, незначительный) дробный компонент, превышающий .79
получает .79
, что означает, что он даст вам значение, превышающее ожидаемое.
Ответ 3
Как насчет
0.01 * ceil(100 * 189.182)