Как округлить число до двух десятичных знаков в C #? - PullRequest
328 голосов
/ 02 ноября 2008

Я хочу сделать это, используя функцию Math.Round

Ответы [ 14 ]

551 голосов
/ 02 ноября 2008

Вот несколько примеров:

decimal a = 1.994444M;

Math.Round(a, 2); //returns 1.99

decimal b = 1.995555M;

Math.Round(b, 2); //returns 2.00

Возможно, вы захотите посмотреть на округление / округление банкиров со следующей перегрузкой:

Math.Round(a, 2, MidpointRounding.ToEven);

Больше информации об этом здесь .

86 голосов
/ 02 ноября 2008

Попробуйте это:

twoDec = Math.Round(val, 2)
33 голосов
/ 23 февраля 2012

Лично я никогда ничего не делаю. Сохраняйте это как можно более решительным, так как в любом случае округление в CS является чем-то вроде красной сельди. Но вы хотите отформатировать данные для своих пользователей, и я считаю, что string.Format("{0:0.00}", number) - это хороший подход.

28 голосов
/ 27 марта 2013

Если вы хотите строку

> (1.7289).ToString("#.##")
"1.73"

Или десятичное число

> Math.Round((Decimal)x, 2)
1.73m

Но помни! Округление не является распределительным, т.е. round(x*y) != round(x) * round(y). Так что не делайте никаких округлений до самого конца вычисления, иначе вы потеряете точность.

13 голосов
/ 15 января 2016

// преобразовать в два десятичных знака

String.Format("{0:0.00}", 140.6767554);        // "140.67"
String.Format("{0:0.00}", 140.1);             // "140.10"
String.Format("{0:0.00}", 140);              // "140.00"

Double d = 140.6767554;
Double dc = Math.Round((Double)d, 2);       //  140.67

decimal d = 140.6767554M;
decimal dc = Math.Round(d, 2);             //  140.67

=========

// just two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

также может комбинировать «0» с «#».

String.Format("{0:0.0#}", 123.4567)       // "123.46"
String.Format("{0:0.0#}", 123.4)          // "123.4"
String.Format("{0:0.0#}", 123.0)          // "123.0"
12 голосов
/ 02 ноября 2008

В Википедии есть хорошая страница по округлению в целом.

Все .NET (управляемые) языки могут использовать любой из механизмов округления CLR. Например, метод Math.Round () (как упомянуто выше) позволяет разработчику указать тип округления (округление до четности или отклонение от нуля). В методе Convert.ToInt32 () и его вариантах используется округление до четного . Методы Ceiling () и Floor () связаны между собой.

Вы также можете округлить с помощью пользовательского числового форматирования .

Обратите внимание, что Decimal.Round () использует метод, отличный от Math.Round ();

Вот полезная позиция t в алгоритме округления банкира. Смотрите один из юмористических сообщений Рэймонда здесь о округлении ...

6 голосов
/ 02 ноября 2017

Я знаю, что это старый вопрос, но, пожалуйста, обратите внимание на следующие различия между Math round и Формат строки round :

decimal d1 = (decimal)1.125;
Math.Round(d1, 2).Dump();   // returns 1.12
d1.ToString("#.##").Dump(); // returns "1.13"

decimal d2 = (decimal)1.1251;
Math.Round(d2, 2).Dump();   // returns 1.13
d2.ToString("#.##").Dump(); // returns "1.13"
5 голосов
/ 23 февраля 2012

Это для округления до 2 десятичных знаков в C #:

label8.Text = valor_cuota .ToString("N2") ;

В VB.NET:

 Imports System.Math
 round(label8.text,2)
4 голосов
/ 02 ноября 2008

Одна вещь, которую вы, возможно, захотите проверить - это Механизм округления по математике. Раунд:

http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx

Кроме этого, я рекомендую подход Math.Round (inputNumer, numberOfPlaces) вместо подхода * 100/100, потому что он чище.

3 голосов
/ 02 ноября 2008

Вы должны быть в состоянии указать количество цифр, которое вы хотите округлить, используя Math.Round (YourNumber, 2)

Вы можете прочитать больше здесь .

...