为什么我看到一个双变量初始化为一些值,如21.4为21.399999618530273?double r = 11.631;double theta = 21.4;在调试器中,如下所示11.631000000000000和21.399999618530273.我怎么才能避免这种情况?
3 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
看到结尾有很多0110 0110 0110吗?那是因为 0.1有 二进制没有精确的表示..这是一个重复的二进制数。就像1/3没有小数表示一样。1/3是0.33333333,你必须永远写3。如果你失去耐心,你会得到一些不准确的东西。
所以你可以想象,在十进制中,如果你试着做3*1/3,而你没有时间永远写3的话,你得到的结果将是0.99999999,而不是1,人们会因为你错了而生气。
跃然一笑
TA贡献1826条经验 获得超6个赞
double theta = 21.4;
if (theta == 21.4){}
if (fabs(theta - 21.4) <= 1e-6){}
添加回答
举报
0/150
提交
取消