我需要将double值四舍五入为2位数.什么是可取的?
String.Format("{0:0.00}", 123.4567); // "123.46"
Math.Round(123.4567, 2) // "123.46"
Run Code Online (Sandbox Code Playgroud)
Cod*_*aos 13
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
它们是不同的功能,如果您需要显示输出,请使用第一个(也会强制显示小数).如果变量是double类型,您将避免不可避免的.ToString()的开销.
请注意,第二个对数字进行舍入,但如果它是整数结果,则只得到整数(即:7对7.00)