【发布时间】:2015-12-24 12:59:32
【问题描述】:
我对 IEEE 754 有相当的了解,所以这不是“为什么将数字 a 和数字 b 相加会导致...”的问题之一。
我想问一下我是否正确理解了定点数字格式说明符,因为它的行为与我对某些双精度值的预期不同。
例如:
double d = 0x3FffffFFFFfffe * (1.0 / 0x3FffffFFFFffff);
Console.WriteLine(d.ToString("R"));
Console.WriteLine(d.ToString("G20"));
Console.WriteLine(d.ToString("F20"));
"R" 和 "G" 说明符都打印出相同的内容 - 正确的值:0.99999999999999989 但无论我告诉它包含多少个小数,"F" 说明符总是向上舍入到 1.0 .即使我告诉它打印最大 99 位小数 ("F99"),它仍然只输出“1”-后跟 99 个零。
那么我的理解是否被破坏了,有人可以指出规范中的相关部分,还是这种行为被破坏了? (这对我来说不会破坏交易,我只是想知道。)
Here 是我看过的,但我没有看到任何解释。
(这是.Net4.0)
【问题讨论】:
标签: c# rounding number-formatting