Math.Round vs String.Format
我需要将double值四舍五入为2位数。 什么是可取的?
String.Format("{0:0.00}", 123.4567); // "123.46" Math.Round(123.4567, 2) // "123.46"
它们是不同的function,如果您需要显示输出,请使用第一个(也强制显示小数)。 如果变量是double类型,您将避免不可避免的.ToString()的开销。
请注意,第二个对数字进行舍入,但如果是整数结果,则只得到整数(即:7对7.00)
数字> 0的Math.Round(double,digits)
在概念上非常不洁净。 但我认为永远不应该使用它。 double
是二进制浮点数,因此没有明确定义的十进制数字概念。
我建议使用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 (这不是大多数人的预期)
- AwayFromZero:3.75回合到3.8
- AwayFromZero:3.85轮到3.9
有关更多信息,请参阅: https : //msdn.microsoft.com/en-us/library/system.math.round.aspx
这取决于你想用它做什么。
String.Format
将返回一个字符串, Math.Round(double)
将返回一个double。
前者输出一个字符串,后者输出一个字符串。 你对结果的用处是什么? 答案将给出你的问题的答案。
如果没有任何开头, Math.Round
将不会添加任何小数位。 String.Format
会。 例如: Math.Round(2)
返回2; String.Format("{0:0.00}",2)
返回2.00;
如果要将此值作为string
返回,则String.Format
更好,如果要将此值作为double
返回,则Math.Round
更好。 这完全取决于您的要求。