可能重複:
c# - How do I round a decimal value to 2 decimal places (for output on a page)圓形雙到小數點後兩位
什麼是圓一個雙到小數點後兩位的最佳途徑,也有它固定爲2位小數?
例:2.346 - > 2.35, 2 - > 2.00
我希望能避免這樣的事情,我有一個雙重轉換爲字符串,然後回雙這似乎是一個糟糕的方式去做這件事。
可能重複:
c# - How do I round a decimal value to 2 decimal places (for output on a page)圓形雙到小數點後兩位
什麼是圓一個雙到小數點後兩位的最佳途徑,也有它固定爲2位小數?
例:2.346 - > 2.35, 2 - > 2.00
我希望能避免這樣的事情,我有一個雙重轉換爲字符串,然後回雙這似乎是一個糟糕的方式去做這件事。
double someValue = 2.346;
String.Format("{0:0.00}", someValue);
這裏不需要調用Math.Round。 – phoog 2010-12-29 20:21:14
回合值所需的精度,然後格式化。始終更喜歡包含中點舍入參數的Math.Round版本。該參數指定如何處理中點值(5)作爲最後一位數字。
如果不指定AwayFromZero爲PARAM值,你將得到默認的行爲,這是ToEven。 例如,使用ToEven作爲四捨五入方法,您可以:
Math.Round(2.025,2)==2.02
和
Math.Round(2.035,2)==2.04
而是使用MidPoint.AwayFromZero PARAM:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
和
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
因此,對於一個正常的四捨五入,最好使用此代碼:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);
var str=String.Format("{0:0.00}", result);
沒有必要對價值進行四捨五入。另外,不需要使用string.Format()。相反,你可以使用'var value = 2.346; var str = value.ToString(「0.00」);'無論你使用double.ToString()還是string.Format(),你都會得到中點從零圓整。所以我應該改寫第一句話:如果您需要MidpointRounding.ToEven,則只應使用Math.Round()。 – phoog 2010-12-29 20:26:30
double someValue = 2.346;
string displayString = someValue.ToString("0.00");
注意double.ToString(因此的String.format())使用中點舍入遠離零,所以成爲0.125 0.13。這通常是期望的顯示行爲。這些字符串顯然不應該用於往返。
這種方法也是不適當的對於在數學計算(其中MidpointRounding.ToEven通常是最好的方法)所需的舍入。在這種情況下,應該使用Math.Round()。
當它們爲零時加上兩個小數位是一種視覺/表示的東西,'double'本身並不關心。所以你肯定需要將它們轉換爲字符串進行顯示。 – 2010-08-30 16:48:26
你是對的,謝謝。 – Robert 2010-08-30 16:58:20