【发布时间】:2010-10-27 10:32:32
【问题描述】:
我目前正在阅读 Steve McConnell 的 Code Complete,特别是关于浮点数的第 295 页。
当我运行以下代码时:
double nominal = 1.0;
double sum = 0.0;
for (int i = 0; i < 10; i++)
{
sum += 0.1;
Console.WriteLine("sum: " + sum.ToString());
}
if (equals(nominal,sum))
{
Console.WriteLine("Numbers are the same");
}
else
{
Console.WriteLine("Numbers are different");
}
我打印出来了 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 数字不同
为什么我没有得到假设发生的输出? IE: 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.79999999999999999 0.89999999999999999 0.99999999999999999 数字不同
当我进行从双精度到字符串的隐式转换时,C# 是否对数字进行舍入?我是这么认为的,因为当我调试应用程序并逐步执行 for 循环时,我可以看到非终止的重复十进制数。你怎么看?我是对还是错?
【问题讨论】:
标签: c# floating-point