我需要将 double 值四舍五入为 2 位数。 什么是优选的?
String.Format("{0:0.00}", 123.4567); // "123.46"
Math.Round(123.4567, 2) // "123.46"
最佳答案
Math.Round(double,digits)
with digits>0 在概念上非常不干净。但我认为永远不应该使用它。 double
是二进制 float ,因此没有明确定义的十进制数字概念。
我建议使用 string.Format
,或者当您只需要为了十进制显示目的而舍入时只使用 ToString("0.00")
,而 decimal.Round
如果您需要对实际数字进行四舍五入(例如在进一步计算中使用它)。
注意:使用 decimal.Round
,您可以指定 MidpointRounding
模式。通常需要 AwayFromZero
舍入,而不是 ToEven
舍入。
使用 ToEven
舍入 0.005m
舍入为 0.00
,0.015
舍入为 0.02
。这不是大多数人所期望的。
比较:
- ToEven:3.75 轮到 3.8
- ToEven:3.85 轮到 3.8 (这不是大多数人所期望的)
- 远离零:3.75 轮到 3.8
- AwayFromZero:3.85 轮到 3.9
有关更多信息,请参阅:https://msdn.microsoft.com/en-us/library/system.math.round.aspx
关于c# - Math.Round 与 String.Format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8397592/