Math.Round vs String.Format

jav*_*red 4 c#

我需要将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.000.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


Mih*_*gos 6

它们是不同的功能,如果您需要显示输出,请使用第一个(也会强制显示小数).如果变量是double类型,您将避免不可避免的.ToString()的开销.

请注意,第二个对数字进行舍入,但如果它是整数结果,则只得到整数(即:7对7.00)