Подтвердить что ты не робот

Округление переменной до двух знаков после запятой С#

Возможный дубликат:
Как вы можете округлить число до двух знаков после запятой в С#?

Мне интересно, как округлить переменные до двух знаков после запятой. В приведенном ниже примере бонус обычно представляет собой число с четырьмя знаками после запятой. Есть ли способ обеспечить, чтобы переменная оплаты всегда округлялась до двух знаков после запятой?

      pay = 200 + bonus;
      Console.WriteLine(pay);
4b9b3361

Ответ 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);

Ответ 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));