双精度保留两位小数
双精度保留两位小数
我有这个代码:
foreach (var line in someList)
{
xValue = Math.Round(Convert.ToDouble(xDisplacement - xOrigin), 2);
yValue= Math.Round(Convert.ToDouble(yDisplacement + yOrigin), 2);
sw.WriteLine("( {0}, {1} )", xValue, yValue);
}
当进行这些计算时,它应该保留2位小数。
然而,当一个数字像6.397时,它会四舍五入为6.4,而不包括尾部的"0"。
如何在数字后面添加"0"?
如果我在上面的foreach循环之前添加下面的代码(除非有更好的方法?):
string properX = xValue.ToString().Replace(".", "");
string properY = yValue.ToString().Replace(".", "");
我该如何操作?
(Double 2 Decimal Places)问题的出现原因是有人想要将一个double类型的数字保留两位小数。解决方法是使用String.Format函数并指定格式"{0:0.00}"来实现。下面是一个相关的示例:
String.Format("{0:0.00}", 123.4567); // "123.46" String.Format("{0:0.00}", 123.4); // "123.40" String.Format("{0:0.00}", 123.0); // "123.00"
这个问题的解决方法还有更多,可以参考MSDN关于字符串数值格式化的文档:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SpecifierPt。
然而需要注意的是,使用"."作为小数点分隔符并不适用于所有的本地化环境。在The ".
" Custom Specifier的文档中指出,小数点分隔符的具体形式取决于控制格式化的NumberFormatInfo
对象的NumberDecimalSeparator
属性。
虽然在原始回答中并没有明确指出是否支持本地化,但这种观点被广泛认可,所以我还是评论了一下。为了避免误导,我已经将原始回答中的相关内容删除,并提供了你提到的MSDN文档的链接。
(Double 2 Decimal Places)这个问题出现的原因是在输出数据时,可能会出现小数位数过多或者不足的情况。解决方法是使用格式化字符串来控制输出的小数位数。
在给定的例子中,使用了格式化字符串来输出xValue和yValue两个变量的值,并保留两位小数。具体的代码如下:
sw.WriteLine("( {0:0.00}, {1:0.00} )", xValue, yValue);
这样,无论xValue和yValue的值是多少,都会被格式化为两位小数的形式进行输出。
在文档中,提到了使用标准数字格式字符串来进行格式化。String.Format和TextWriter.WriteLine都提供了相同的格式选项。
其中,某些情况下硬编码的小数点可能会导致本地化(L10N)问题。然而,这种说法是不正确的。String.Format会考虑本地化设置,以便使用适当的符号。在msdn.microsoft.com/en-us/library/0c899ak8.aspx#SpecifierPt中指出,“".
"”自定义格式说明符会将本地化的小数分隔符插入结果字符串中,并且“结果字符串中用作小数分隔符的字符并不总是点号;它由控制格式化的NumberFormatInfo对象的NumberDecimalSeparator属性决定。”
因此,使用格式化字符串来控制小数位数是一种有效的解决方法,可以在输出数据时避免小数位数过多或者不足的问题。