2013-10-23 163 views
2

例如。Math.Round,保留小數位

Math.Round(2.314, 2) //2.31 
Math.Round(2.301, 2) //2.3 , but I want this as 2.30 
+0

應DUP的類似的問題百名。你應該使用適當的格式來打印數字('2.3'和'2.30'是'float' /'double' /'decimal'的相同值) –

+0

也是這個[限制雙精度到小數點後3位](http: /stackoverflow.com/questions/3814190/limiting-double-to-3-decimal-places)解釋你現在的問題。 –

回答

8

數字在小數點後沒有任何零概念。

你實際上是在問如何將數字轉換成字符串額外的零:

(2.301).ToString("0.00") // "2.30" 

更多細節見numeric format strings
特別是,0說明符將從零開始捨去。

+3

我認爲OP仍然需要先調用Math.Round,因爲ToString將會截斷,即'(2.309).ToString(「0.00」)'將變成'2.30'。 – mayabelle

+3

@mayabelle:錯了。(嘗試它) – SLaks

+0

+1 ...應該由同義詞搜索SO ...建立你自己的截斷標題:'{「limit」,「keep」,「preserve」,「leave」,「show」} {1在{「float」,「double」,「decimal」,「number」中爲{},「1,2,3」,「1,2,3」,用於} {「小數位數」,「小數點後」,「數字」,「數字」 「......」「......」 –

1

2.3和2.30是一回事。如果你想要字符串 2.30,那麼在Math.Round函數上使用.ToString(「F2」)。

1

從代碼的角度來看,2.3和2.30是一樣的。您可以通過格式化字符串顯示尾隨零:

string yourString = Math.Round(2.301, 3).ToString("0.00"); 
1

小數仍然存在,你可能只是沒有看到,因爲當你在看的字符串表示,在默認情況下它會忽略尾隨零。你可以通過傳遞一個格式字符串覆蓋此行爲ToString()

Console.WriteLine(Math.Round(2.301, 2).ToString("N2")) // 2.30 

不過,當然,如果這只是用於顯示目的,你並不真的需要調用Math.Round

Console.WriteLine(2.301.ToString("N2")) // 2.30 

進一步閱讀

0

如果使用decimal號碼(其文字結束與m,對 「錢」),你得到你以後的行爲。 double號碼沒有像decimal那樣有重要零的概念。

Math.Round(2.314m, 2); 
Math.Round(2.301m, 2); 

或者,如果你想改變你怎麼看這些數字,你可以使用一個string format

Math.Round(2.314, 2).ToString("N2"); 
Math.Round(2.301, 2).ToString("N2");