C# 双精度小数点后2位

C# 双精度小数点后2位,c#,math,decimal,rounding,C#,Math,Decimal,Rounding,可能重复: 我有这个: 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("(

可能重复:

我有这个:

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(".", "");
如何执行此操作?

使用格式字符串:

sw.WriteLine("( {0:0.00}, {1:0.00} )", xValue, yValue);
有关文档,请参阅
String.Format
TextWriter.WriteLine
公开相同的格式选项。

使用a显示任意多的小数位数:

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

此链接中的第一组示例:

应该是你要找的。它还提供了更多细节

有关字符串数字格式的MSDN文档:

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

这个尾随的零与数字本身无关,而是与其表示形式有关。因此,如果要显示它,则数字没有任何更改-使用字符串格式:

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

您可以将舍入作为输出格式的一部分,而不是对值进行舍入(您可能不希望这样做):

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

硬编码小数点可能会导致L10N@Stuart邓克尔德:不!这不是
说明符在格式字符串中的工作方式。String.Format会考虑本地化设置,以便使用适当的符号。参见其中的“自定义格式说明符在结果字符串中插入本地化的十进制分隔符”“结果字符串中用作小数分隔符的字符并不总是句点;它由控制格式化的
NumberFormatInfo
对象的
NumberDecimalSeparator
属性确定。“与您的问题无关,但您真的想要
xDisplacement-xOrigin
?我不知道你的应用程序会做什么,但通常位移是从原点减去的,而不是从原点减去。@Daniel:哈哈,我知道这有点让人困惑。但实际上我发现了一些不同的东西。。这只是一个一般性的问题:PSorry,但这允许人们继续相信使用
不支持本地化。请注意,for的文档说明:“在结果字符串中用作小数分隔符的字符并不总是句点;它由控制格式的
NumberFormatInfo
对象的
NumberDecimalSeparator
属性决定。”@Jason,我不确定它是否支持本地化,因此,我谨慎地选择了我的话,并说“你可能需要”。但我还是删除了它,并提供了一个指向你提到的MSDN文档的链接。这很公平。这是一个非常普遍的神话,即使你的陈述不坚定,我也不得不发表评论。