可能重复:
c# - How do I round a decimal value to 2 decimal places (for output on a page)圆形双到小数点后两位
什么是圆一个双到小数点后两位的最佳途径,也有它固定为2位小数?
例:2.346 - > 2.35, 2 - > 2.00
我希望能避免这样的事情,我有一个双重转换为字符串,然后回双这似乎是一个糟糕的方式去做这件事。
可能重复:
c# - How do I round a decimal value to 2 decimal places (for output on a page)圆形双到小数点后两位
什么是圆一个双到小数点后两位的最佳途径,也有它固定为2位小数?
例:2.346 - > 2.35, 2 - > 2.00
我希望能避免这样的事情,我有一个双重转换为字符串,然后回双这似乎是一个糟糕的方式去做这件事。
double someValue = 2.346;
String.Format("{0:0.00}", someValue);
这里不需要调用Math.Round。 – phoog 2010-12-29 20:21:14
回合值所需的精度,然后格式化。始终更喜欢包含中点舍入参数的Math.Round版本。该参数指定如何处理中点值(5)作为最后一位数字。
如果不指定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);
没有必要对价值进行四舍五入。另外,不需要使用string.Format()。相反,你可以使用'var value = 2.346; var str = value.ToString(“0.00”);'无论你使用double.ToString()还是string.Format(),你都会得到中点从零圆整。所以我应该改写第一句话:如果您需要MidpointRounding.ToEven,则只应使用Math.Round()。 – phoog 2010-12-29 20:26:30
double someValue = 2.346;
string displayString = someValue.ToString("0.00");
注意double.ToString(因此的String.format())使用中点舍入远离零,所以成为0.125 0.13。这通常是期望的显示行为。这些字符串显然不应该用于往返。
这种方法也是不适当的对于在数学计算(其中MidpointRounding.ToEven通常是最好的方法)所需的舍入。在这种情况下,应该使用Math.Round()。
当它们为零时加上两个小数位是一种视觉/表示的东西,'double'本身并不关心。所以你肯定需要将它们转换为字符串进行显示。 – 2010-08-30 16:48:26
你是对的,谢谢。 – Robert 2010-08-30 16:58:20