为什么我看到一个双变量初始化为一些值,如21.4为21.399999618530273?

为什么我看到一个双变量初始化为一些值,如21.4为21.399999618530273?

double r = 11.631;double theta = 21.4;

在调试器中,如下所示11.63100000000000021.399999618530273.

我怎么才能避免这种情况?


慕尼黑5688855
浏览 558回答 3
3回答

隔江千里

这些精度问题是由于内部表示法对于浮点数,你没有什么可以避免的。顺便说一下,在运行时打印这些值仍然可以得到正确的结果,至少使用现代的C+编译器是这样的。对于大多数操作来说,这并不是什么大问题。

慕娘9325324

它处理Excel 2007中类似的二进制浮点精度问题:看到结尾有很多0110 0110 0110吗?那是因为0.1有二进制没有精确的表示..这是一个重复的二进制数。就像1/3没有小数表示一样。1/3是0.33333333,你必须永远写3。如果你失去耐心,你会得到一些不准确的东西。所以你可以想象,在十进制中,如果你试着做3*1/3,而你没有时间永远写3的话,你得到的结果将是0.99999999,而不是1,人们会因为你错了而生气。

跃然一笑

如果您有如下所示的值:double&nbsp;theta&nbsp;=&nbsp;21.4;你想做的是:if&nbsp;(theta&nbsp;==&nbsp;21.4){}你必须有点聪明,你需要检查θ的值是否是真的接近21.4,但不一定是这个值。if&nbsp;(fabs(theta&nbsp;-&nbsp;21.4)&nbsp;<=&nbsp;1e-6){}
打开App,查看更多内容
随时随地看视频慕课网APP