定点数字格式说明符舍入为双精度数?

时间:2015-09-27 00:40:13

标签: c# rounding number-formatting

我对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)

1 个答案:

答案 0 :(得分:0)

用户“w.b”链接到另一个问题,我怀疑这个问题有最好的答案可用...尽管在细节和文档方面存在一些模糊性。 (不幸的是评论被删除了。)

关联的问题是Formatting doubles for output in C#

简而言之,它似乎表明除非您使用GR说明符,否则在自定义格式化之前输出总是减少到15位小数。任何人都可以链接到该问题的最佳文档是this MSDN page。细节和措辞并不像我希望的那样清晰,但如上所述,我认为这是我将要找到的最好的。