我需要雙值四捨五入到2位數。 什麼是可取的?Math.Round與String.Format
String.Format("{0:0.00}", 123.4567); // "123.46"
Math.Round(123.4567, 2) // "123.46"
我需要雙值四捨五入到2位數。 什麼是可取的?Math.Round與String.Format
String.Format("{0:0.00}", 123.4567); // "123.46"
Math.Round(123.4567, 2) // "123.46"
它們是不同的功能,如果需要輸出顯示,請使用第一個(也會強制顯示小數)。您將避免不可避免的.ToString()的開銷,如果該變量是double類型的話,將會發生這種開銷。
注意,第二輪一個數字,但如果它是一個整數的結果,你會得到公正的整數(即:7 VS 7.00),這取決於你想用它做什麼
前者輸出字符串,後者是雙字符串。你對結果有什麼用處?這個答案會給出你的問題的答案。
。
String.Format
將返回一個字符串,Math.Round(double)
將返回一個double。
如果要將此值作爲字符串返回,則String.Format更好,並且如果要在此情況下將該值作爲double返回,則Math.Round更好。它完全取決於你的要求。
Math.Round(double,digits)
數字> 0在概念上非常不潔。但我認爲它不應該被使用。 double
是一個二進制浮點數,因此沒有明確定義的十進制數字的概念。
我建議使用string.Format
,或者只是ToString("0.00")
時,你只需要一輪十進制顯示目的,decimal.Round
如果你需要(在進一步的計算中使用它,例如)四捨五入的實際數量。
注意:使用decimal.Round
您可以指定MidpointRounding
模式。通常要求AwayFromZero
舍入,而不是ToEven
舍入。
隨着ToEven
四捨五入0.005m
被四捨五入到0.00
和0.015
被四捨五入爲0.02
。這不是大多數人所期望的。
比較:
更多信息,請參見:https://msdn.microsoft.com/en-us/library/system.math.round.aspx
...如果我不是「大多數人」,該怎麼辦? –
那麼他們需要是不一樣的,所以你可能更喜歡'Math.Round'並使用其舍入選項,還要檢查該[字符串格式四捨五入(HTTP://計算器。 com/questions/2226081/why-does-net-use-a-rounding-algorithm-in-string-format-that-is-inconsistent-wit) – V4Vendetta
關於你將貨幣存儲爲double的機會,你應該真的考慮使用十進制。 http://msdn.microsoft.com/en-us/library/364x0z75%28v=vs.80%29.aspx – spender
'數學。數字> 0的圓形(雙數,數字)在概念上非常不潔。我認爲它不應該被使用。 'double'是一個二進制浮點數,因此沒有明確定義的十進制數的概念。如果您需要將數字四捨五入到一定數量的小數位,請使用「小數」而不是「Double」。 – CodesInChaos