Округление переменной до двух знаков после запятой С#
Возможный дубликат:
Как вы можете округлить число до двух знаков после запятой в С#?
Мне интересно, как округлить переменные до двух знаков после запятой. В приведенном ниже примере бонус обычно представляет собой число с четырьмя знаками после запятой. Есть ли способ обеспечить, чтобы переменная оплаты всегда округлялась до двух знаков после запятой?
pay = 200 + bonus;
Console.WriteLine(pay);
Ответы
Ответ 1
Используйте Math.Round и укажите количество знаков после запятой.
Math.Round(pay,2);
Метод Math.Round(Double, Int32)
Устанавливает значение с плавающей запятой с двойной точностью с заданным номером дробных цифр.
Или Метод Math.Round(десятичный, Int32)
Устанавливает десятичное значение на указанное число дробных цифр.
Ответ 2
Вы должны использовать форму Math.Round
. Имейте в виду, что Math.Round
по умолчанию используется округление банкинга (округление до ближайшего четного числа), если вы не указали значение MidpointRounding
. Если вы не хотите использовать округление банкира, вы должны использовать Math.Round(decimal d, int decimals, MidpointRounding mode)
, например:
Math.Round(pay, 2, MidpointRounding.AwayFromZero); // .005 rounds up to 0.01
Math.Round(pay, 2, MidpointRounding.ToEven); // .005 rounds to nearest even (0.00)
Math.Round(pay, 2); // Defaults to MidpointRounding.ToEven
(Почему .NET использует округление банкира?)
Ответ 3
decimal pay = 1.994444M;
Math.Round(pay , 2);
Ответ 4
Вы можете округлить результат и использовать string.Format
, чтобы установить такую точность:
decimal pay = 200.5555m;
pay = Math.Round(pay + bonus, 2);
string payAsString = string.Format("{0:0.00}", pay);
Ответ 5
Используйте System.Math.Round для округления десятичного значения до заданного количества дробных цифр.
var pay = 200 + bonus;
pay = System.Math.Round(pay, 2);
Console.WriteLine(pay);
Ссылки MSDN:
Ответ 6
Убедитесь, что вы указали номер, обычно используется двойной. Math.Round может принимать 1-3 аргумента, первый аргумент - это переменная, которую вы хотите округлить, вторая - число десятичных знаков, а третья - тип округления.
double pay = 200 + bonus;
double pay = Math.Round(pay);
// Rounds to nearest even number, rounding 0.5 will round "down" to zero because zero is even
double pay = Math.Round(pay, 2, MidpointRounding.ToEven);
// Rounds up to nearest number
double pay = Math.Round(pay, 2, MidpointRounding.AwayFromZero);
Ответ 7
Обратите внимание на то, что Round
раунды.
Итак (я не знаю, имеет ли это значение в вашей отрасли или нет), но:
float a = 12.345f;
Math.Round(a,2);
//result:12,35, and NOT 12.34 !
Чтобы сделать это более точным для вашего случая, мы можем сделать что-то вроде этого:
int aInt = (int)(a*100);
float aFloat= aInt /100.0f;
//result:12,34
Ответ 8
Console.WriteLine(decimal.Round(pay,2));