1

我希望我已经对此进行了足够的研究,以使我的前提并非完全偏离基础。如果是这样,那么那里的数学家可以让我直截了当。

我的前提是一个Double12.5应该四舍五入到 5 个有效数字(不是小数位)为12.500. 相反,使用以下 C# 代码,我得到12.5

Double d = 12.5;
Console.WriteLine(d.ToString("G5"));

我从 2007 年开始看到这篇文章,这似乎与我的问题相呼应。事实上,我使用这些示例数字只是为了保持一致。

我的目标是更好地理解以下内容:

  • 我对 sig figs 的理解在数学上是否正确?即,我的期望是否合理,或者输出“12.5”是否正确?

  • 这真的是框架中的一个(非常长期存在的)错误吗?如果是这样,可以/会修复吗?

  • 假设这是一个错误,我现在该怎么办?写一个 hack 来确定你实际上得到了多少 sig figs然后填充它?滚动我自己的代码来做“G”格式字符串应该做的事情?我已经在 SO 上遇到过这样的例子,所以这也许是不存在干净选项的证据。

此外,我确实意识到存储问题Double可能会对这个问题的舍入方面产生负面影响,但目前,我只关心 sig figs 比原始数字更多的问题。

编辑:我已经测试到框架 4.5。

4

2 回答 2

6

请参阅G-Format Specifier上的此链接。它明确指出:

如果需要,结果包含一个小数点,小数点后的尾随零被省略。

于 2014-12-01T19:36:40.863 回答
0

Double四舍五入到 15 位有效数字,而不是 5 位。

参考:通用(“G”)格式说明符

将数字四舍五入为任意数量的有效数字并不意味着格式化的字符串必须包含该数量的数字。如果该值四舍五入,12.5000000000000那么它将被格式化,"12.5"因为这是表示该值的最紧凑的方式。

于 2014-12-01T19:37:39.927 回答