将数字保留两位小数

3
我是一名有用的助手,可以为您进行翻译。
以下是需要翻译的内容:

可能会有重复:
如何正确四舍五入和格式化小数?

我有这个:

double xValue = 0.0;
double yValue = 0.0;

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(".", "");

我该如何处理这个问题?


与您的问题无关,但是,您真的想要 xDisplacement - xOrigin 吗?我不知道您的应用程序是什么,但通常是从原点减去位移,而不是相反。 - Daniel Renshaw
@Daniel:哈哈,我知道这有点令人困惑。但实际上我正在用它来解决另一个问题...这只是一个普通的问题:P - theNoobGuy
http://msdn.microsoft.com/en-us/library/system.string.format%28v=vs.71%29.aspx - Freelancer
5个回答

5

使用格式化字符串:

sw.WriteLine("( {0:0.00}, {1:0.00} )", xValue, yValue);

关于文档,请查看标准数字格式字符串String.FormatTextWriter.WriteLine都提供相同的格式选项。


硬编码小数点可能会导致L10N问题。 - stuartd
2
@Stuart Dunkeld: 不!这不是.格式字符串中的工作方式。String.Format会考虑本地化设置,以便使用适当的符号。请参考http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SpecifierPt,其中指出:““`.`”自定义格式说明符将本地化的小数分隔符插入结果字符串中。”和“结果字符串中用作小数分隔符的字符并不总是一个句点;它由控制格式的`NumberFormatInfo`对象的`NumberDecimalSeparator`属性确定。” - jason

3

抱歉,但这会让人们误解使用“.”不支持本地化。请注意,.”自定义说明符的文档说明:“在结果字符串中用作小数点分隔符的字符并不总是一个句号;它由控制格式的NumberFormatInfo对象的NumberDecimalSeparator属性确定。” - jason
@Jason 好的,我不确定它是否支持本地化,因此我谨慎选择了我的措辞并说“你可能需要”。但是我已经将其删除,并提供了您提到的MSDN文档链接。 - Adam Houldsworth
好的。这是一个非常普遍的误解,即使你没有坚定地表达你的观点,我也不得不发表评论。 - jason

2

这个末尾的零与数字本身无关,而是与它的表示方式有关。因此,如果您想显示它,与数字本身无关 - 使用字符串格式:

sw.WriteLine("( {0:0.00}, {1:0.00} )", xValue, yValue);

1

使用数字格式字符串来显示任意数量的小数位:

sw.WriteLine("( {0:N2}, {1:N2} )", xValue, yValue);

1

如果你不想对值进行四舍五入,那么你可以将四舍五入作为输出格式的一部分来完成:

WriteLine("{0:0.00}", value)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接