我有这个测试代码:
class Test
{
static void Main()
{
decimal m = 1M / 6M;
double d = 1.0 / 6.0;
decimal notQuiteWholeM = m + m + m + m + m + m; // 1.0000000000000000000000000002M
double notQuiteWholeD = d + d + d + d + d + d; // 0.99999999999999989
Console.WriteLine(notQuiteWholeM); // Prints: 1.0000000000000000000000000002
Console.WriteLine(notQuiteWholeD); // Prints: 1.
Console.WriteLine(notQuiteWholeM == 1M); // False
Console.WriteLine(notQuiteWholeD < 1.0); // Prints: True. Why?
Console.ReadKey();
}
}
为什么这一行打印 1?
Console.WriteLine(notQuiteWholeD); // Prints: 1
一个这个,为什么打印True?
是否有自动舍入过程?我该怎么做才能打印正确/计算的值?
[注意:我在 Nutsheel第 30 页的 C# 5.0 中找到了这个示例代码:实数舍入错误]。
提前致谢。