2008-11-02 7 views

ответ

69

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

twoDec = Math.Round(val, 2) 
468

Вот пример:

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.

+40

Вы должны cla что MidPointRounding.ToEven является стандартным. Если вам нужен AwayFromZero, вам придется использовать перегрузку – 2009-02-23 18:25:30

+4

. Я понял, почему MidPointRounding.ToEven является значением по умолчанию ... – Pedro77 2013-04-29 21:31:04

+2

Я думаю, что это должно быть: `MidpointRounding` не` MidPointRounding`, если кто-то задается вопросом, почему он не компилируется. – 2013-11-08 14:24:42

3

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

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

12

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 о округление ...

5

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

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

В VB.NET:

Imports System.Math 
round(label8.text,2) 
31

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

22

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

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

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

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

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

1

string a = "10.65678";

десятичное д = Math.Round (Convert.ToDouble (a.ToString()), 2)

9

// преобразование Шифрование до двух знаков после запятой

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" 
0
public double RoundDown(double number, int decimalPlaces) 
     { 
      return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces); 
     } 
2

Я знаю его старый вопрос, но обратите внимание на следующие различия между 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" 

 Смежные вопросы

  • Нет связанных вопросов^_^