为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

为什么我看到一个双变量初始化为一些值,如21.4为21.399999618530273?double r = 11.631;double theta = 21.4;在调试器中,如下所示11.631000000000000和21.399999618530273.我怎么才能避免这种情况?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

这些精度问题是由于内部表示法对于浮点数,你没有什么可以避免的。

顺便说一下,在运行时打印这些值仍然可以得到正确的结果,至少使用现代的C+编译器是这样的。对于大多数操作来说,这并不是什么大问题。


查看完整回答
反对 回复 2019-06-10
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

它处理Excel 2007中类似的二进制浮点精度问题:

看到结尾有很多0110 0110 0110吗?那是因为0.1二进制没有精确的表示..这是一个重复的二进制数。就像1/3没有小数表示一样。1/3是0.33333333,你必须永远写3。如果你失去耐心,你会得到一些不准确的东西。

所以你可以想象,在十进制中,如果你试着做3*1/3,而你没有时间永远写3的话,你得到的结果将是0.99999999,而不是1,人们会因为你错了而生气。


查看完整回答
反对 回复 2019-06-10
?
跃然一笑

TA贡献1826条经验 获得超6个赞

如果您有如下所示的值:

double theta = 21.4;

你想做的是:

if (theta == 21.4){}

你必须有点聪明,你需要检查θ的值是否是真的接近21.4,但不一定是这个值。

if (fabs(theta - 21.4) <= 1e-6){}


查看完整回答
反对 回复 2019-06-10
  • 3 回答
  • 0 关注
  • 553 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信