Я хочу сделать это с помощью Math.Round
функции
c#
decimal
rounding
bankers-rounding
Рекс М
источник
источник
0.005
к числу перед округлением. Аналогично округлить , вычесть,0.005
прежде чем перейти кMath.Round
функции.MidPointRounding.ToEven
(ака "округление банкиров"), заключается в том, что все мы учились округлять в школе, где округление .5 вызывает слишком много округления. Это проблема при работе с деньгами, расчетами налогов и т. Д.Попробуй это:
источник
Лично я никогда ничего не делаю. Сохраняйте это как можно более решительным, так как в любом случае округление в CS является чем-то вроде красной сельди. Но вы хотите отформатировать данные для своих пользователей, и я считаю, что
string.Format("{0:0.00}", number)
это хороший подход.источник
Если вы хотите строку
Или десятичный
Но помните! Округление не является распределительным, т.е.
round(x*y) != round(x) * round(y)
, Так что не делайте никаких округлений до самого конца вычисления, иначе вы потеряете точность.источник
В Википедии есть хорошая страница по округлению в целом.
Все .NET (управляемые) языки могут использовать любой из механизмов округления CLR. Например, метод Math.Round () (как упомянуто выше) позволяет разработчику указать тип округления (округление до четного или Away-from-zero). Метод Convert.ToInt32 () и его варианты используют округление до четности . Потолок () и покрытие () методы связаны между собой .
Вы можете округлить с пользовательским числовым форматированием, а также.
Обратите внимание, что Decimal.Round () использует метод, отличный от Math.Round ();
Вот полезная позиция по алгоритму округления банкира. Смотрите один из юмористических постов Рэймонда здесь о округлении ...
источник
// конвертируем до двух десятичных знаков
=========
также можно комбинировать «0» с «#».
источник
Я знаю, что это старый вопрос, но, пожалуйста, обратите внимание на следующие различия между раундом Math и String :
источник
Это для округления до 2 десятичных знаков в C #:
В VB.NET:
источник
Если вы хотите округлить число, вы можете получить разные результаты в зависимости от: как вы используете функцию Math.Round () (если для округления вверх или вниз), вы работаете с двойными и / или плавающими числами и вы применяете округление средней точки. Особенно, когда используется с операциями внутри него или переменная для округления происходит от операции. Допустим, вы хотите умножить эти два числа: 0,75 * 0,95 = 0,7125 . Правильно? Не в C #
Посмотрим, что произойдет, если вы захотите округлить до 3-го знака после запятой:
Как видите, первый раунд () является правильным, если вы хотите округлить среднюю точку. Но второй раунд () это неправильно, если вы хотите округлить.
Это относится к отрицательным числам:
Итак, IMHO, вы должны создать свою собственную функцию обтекания для Math.Round (), которая соответствует вашим требованиям. Я создал функцию, в которой параметр roundUp = true означает округление до следующего большего числа. То есть: 0,7125 раундов до 0,713 и -0,7125 раундов до -0,712 (потому что -0,712> -0,713). Это функция, которую я создал и работает для любого количества десятичных знаков:
Переменная 'corrector' предназначена для исправления неточностей работы с плавающими или двойными числами.
источник
Одной вещью, которую вы можете захотеть проверить, является Механизм округления Math.Round:
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Кроме этого, я рекомендую подход Math.Round (inputNumer, numberOfPlaces) вместо подхода * 100/100, потому что он чище.
источник
Вы должны быть в состоянии указать количество цифр, которое вы хотите округлить, используя Math.Round (YourNumber, 2)
Вы можете прочитать больше здесь .
источник
Math.Floor (123456.646 * 100) / 100 Возвращает 123456.64
источник
строка a = "10.65678";
десятичное d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
источник
В странной ситуации, когда у меня была десятичная переменная, при сериализации 55.50 всегда математически устанавливается значение по умолчанию 55.5. Но в то же время наша клиентская система серьезно ожидает 55,50 по некоторым причинам, и они определенно ожидали десятичную. Вот когда я написал нижеследующий помощник, который всегда конвертирует любое десятичное значение, дополненное 2 цифрами с нулями, вместо отправки строки.
Использование должно быть
Вывод:
источник
источник