Math.Round vs String.Format

时间:2011-12-06 09:21:24

标签: c#

我需要将double值四舍五入为2位数。 什么是可取的?

String.Format("{0:0.00}", 123.4567);      // "123.46"
Math.Round(123.4567, 2)                   // "123.46"

6 个答案:

答案 0 :(得分:11)

数字> 0的

Math.Round(double,digits)在概念上非常不洁净。但我认为永远不应该使用它。 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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

这取决于你想用它做什么。

String.Format将返回一个字符串,Math.Round(double)将返回一个字符串。

答案 3 :(得分:1)

前者输出一个字符串,后者输出一个双字符串。你对结果的用处是什么?答案将回答你的问题。

答案 4 :(得分:0)

如果您希望将此值作为string返回,那么String.Format会更好,如果您希望将此值作为double返回,则Math.Round更好。这完全取决于你的要求。

答案 5 :(得分:0)

如果没有任何开头,

Math.Round将不会添加任何小数位。 String.Format会。 例如:Math.Round(2)返回2;      String.Format("{0:0.00}",2)返回2.00;