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文档的链接。这很公平。这是一个非常普遍的神话,即使你的陈述不坚定,我也不得不发表评论。