可能重复的问题:
c# - 如何将 double 值保留两位小数并固定在两位小数?
最佳的方式是什么,可以将 double 值四舍五入到两位小数并使其固定在两位小数?
例如:2.346 -> 2.35, 2 -> 2.00
我希望避免像这样将 double 转换为字符串然后再转回 double 的方法,因为这似乎是一种不好的做法。
可能重复的问题:
c# - 如何将 double 值保留两位小数并固定在两位小数?
最佳的方式是什么,可以将 double 值四舍五入到两位小数并使其固定在两位小数?
例如:2.346 -> 2.35, 2 -> 2.00
我希望避免像这样将 double 转换为字符串然后再转回 double 的方法,因为这似乎是一种不好的做法。
double someValue = 2.346;
String.Format("{0:0.00}", someValue);
将值舍入到所需的精度,然后进行格式化。始终优先使用包含中间值(5)处理参数的Math.Round版本。此参数指定如何处理中间值。
如果未将AwayFromZero指定为param的值,则会获得默认行为ToEven。例如,使用ToEven作为舍入方法,您将获得:
Math.Round(2.025,2)==2.02
和
Math.Round(2.035,2)==2.04
相反,使用MidPoint.AwayFromZero param:
Math.Round(2.025,2,MidpointRounding.AwayFromZero)==2.03
和
Math.Round(2.035,2,MidpointRounding.AwayFromZero)==2.04
因此,对于正常的四舍五入,最好使用此代码:
var value=2.346;
var result = Math.Round(value, 2, MidpointRounding.AwayFromZero);
var str=String.Format("{0:0.00}", result );
var value = 2.346; var str = value.ToString("0.00");
。无论您是使用double.ToString()还是string.Format(),都将得到远离零点的中间值。因此,我应该重新表述第一句话:只有在需要MidpointRounding.ToEven时才应该使用Math.Round()。 - phoogdouble someValue = 2.346;
string displayString = someValue.ToString("0.00");
请注意,double.ToString(因此也包括string.Format())使用四舍五入的中间值规则,因此0.125变成了0.13。这通常是显示时所需的行为。显然,这些字符串不应用于往返航班。
对于需要进行数学计算的舍入(其中MidpointRounding.ToEven通常是最佳方法),该方法也不适用。在这种情况下,应使用Math.Round()。
Take a look at Math.Round
double
本身并不关心这一点。因此,你肯定需要将它们转换成字符串进行显示。 - Matt Greer