Я хочу сделать это с помощью функции Math.Round
Как вы можете округлить число до двух знаков после запятой в C#?
ответ
Попробуйте это:
twoDec = Math.Round(val, 2)
Вот пример:
decimal a = 1.994444M;
Math.Round(a, 2); //returns 1.99
decimal b = 1.995555M;
Math.Round(b, 2); //returns 2.00
Вы также можете захотеть взглянуть на банкиров округления/круглый-to даже со следующей перегрузкой:
Math.Round(a, 2, MidpointRounding.ToEven);
Там больше информации об этом here.
Вы должны быть в состоянии указать количество цифр, который вы хотите округлить с помощью Math.Round (YourNumber, 2)
Вы можете прочитать больше here.
Одна вещь, вы можете проверить это Округление Механизм Math.Round:
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Кроме того, я рекомендую подход Math.Round (inputNumer, numberOfPlaces) над * 100/100 один, потому что он чище.
Wikipedia has a nice page на округлении в целом.
Все языки .NET (управляемые) могут использовать любые механизмы округления CLR. Например, метод(как упоминалось выше) позволяет разработчику указывать тип округления (округление до четного или отходящее от нуля). Метод Convert.ToInt32() и его варианты используют round-to-even. Используются методы Ceiling() и Floor().
Вы также можете сделать раунд с custom numeric formatting.
Отметьте, что Decimal.Round() использует другой метод, отличный от Math.Round();
Описание: Алгоритм округления банкира - useful pos. Смотрите один из Реймонда юмористические posts here о округление ...
Это для округления до 2-х знаков после запятой в C#:
label8.Text = valor_cuota .ToString("N2") ;
В VB.NET:
Imports System.Math
round(label8.text,2)
Лично я никогда не круглые что-нибудь. Держите его как можно более решительным, так как округление - это немного красная селедка в CS. Но вы хотите отформатировать данные для своих пользователей, и с этой целью я считаю, что string.Format("{0:0.00}", number)
- хороший подход.
Если вы хотите строку
> (1.7289).ToString("#.##")
"1.73"
или десятичного
> Math.Round((Decimal)x, 2)
1.73m
Но помните! Округление не является дистрибутивным, т.е. round(x*y) != round(x) * round(y)
. Поэтому не делайте никакого округления до самого конца вычисления, иначе вы потеряете точность.
string a = "10.65678";
десятичное д = Math.Round (Convert.ToDouble (a.ToString()), 2)
// преобразование Шифрование до двух знаков после запятой
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"
public double RoundDown(double number, int decimalPlaces)
{
return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces);
}
Math.Floor (123456,646 * 100)/100 вернуть бы 123456.64
Я знаю его старый вопрос, но обратите внимание на следующие различия между Math круглыми и Строковый формат раунд:
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"
Вы должны cla что MidPointRounding.ToEven является стандартным. Если вам нужен AwayFromZero, вам придется использовать перегрузку – 2009-02-23 18:25:30
. Я понял, почему MidPointRounding.ToEven является значением по умолчанию ... – Pedro77 2013-04-29 21:31:04
Я думаю, что это должно быть: `MidpointRounding` не` MidPointRounding`, если кто-то задается вопросом, почему он не компилируется. – 2013-11-08 14:24:42