为什么1.2-1.1不等于0.1。

给你一囗甜甜゛ 提交于 2019-12-05 07:17:07

我们在java代码里写入这么一句代码:

System.out.println(1.2-1.1);

运行它,结果出来了,却不是预期的0.1。

这是为什么呢?

这是由计算机本身二进制结构导致的结果。在十进制中,1.1是有穷尽的小数,但是用计算机表达的时候,会被自动翻译成二进制,也就是1.0001100110011...

1.2也是如此,二进制是1.001100110011..

.两者相减,也就是约等于(1.001100110011...-1.0001100110011...=0.0001100110011...)

当计算机再把0.0001100110011...这个结果翻译成10进制的时候,就得到了让人诧异的0.09999999999999987。

这个问题让我想起了大学里数据结构课程中,用数组模拟大数字四则运算的代码……怀念~

很多时候,大家在程序设计里,一不小心就会碰到这个问题(算钱不正确等等现象),但是怎么也找不到问题究竟发生在哪里。最后才发现问题原来出在这里!

即便你知道java有这么个问题存在,但是写代码的时候一不小心就忽视了它,导致bug发生。希望大家能够避免类似情况发生。(例如设计的时候就考虑到,用Java的BigDecimal类去实现相关计算。)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!