![c795d19490c16b1a66d16ff6ee12e9db.png](https://i-blog.csdnimg.cn/blog_migrate/ef7a34e1b8b38a5920e33e8f87646887.jpeg)
阅读本文大概需要 1 分钟。
先来考考大家,在下列 Java 代码中,你觉得在控制台会打印什么值呢?
![8e78628492dde6fe2b67b71c005bf355.png](https://i-blog.csdnimg.cn/blog_migrate/e586f7bbf3f32bf2aca3f74abfb42e06.jpeg)
貌似难不倒大家,这不是 so easy ,连小学生都会算的题目,1.0 - 0.9 = 0.1 啊,但是你觉得会等于 0.1 吗?
看下上图代码的输出结果:
![0dfb8658f54efc0bedaae2538aa612c2.png](https://i-blog.csdnimg.cn/blog_migrate/4fa01da1c6fb0450ade641f79d927800.jpeg)
有没有惊讶,有没有很刺激,0.0……02 难道被计算机吃掉了???
好吧,当初我也是这幅表情(原谅我基础薄弱)。
那如果我们将其换成 float 类型的会怎么样呢?再来试试。
![c076f2b629aa058c02c14ec5427d4f01.png](https://i-blog.csdnimg.cn/blog_migrate/3b1d84dad18f93727b7ea445c98d7118.jpeg)
控制台打印结果:
![d5f00ab88ffc006a35f0b44f1a8100ef.png](https://i-blog.csdnimg.cn/blog_migrate/392b4fec5cd724b9a77b72cad6e6be73.jpeg)
结果居然多了 0.10…24,那不得乐开花啊~
那么以上这些现象是为什么呢?
浮点数在计算机中采用二进制表示,而二进制系统无法精确表示某些小数,比如 1/10 ,就像十进制无法表示 1/3 一样,这样是产生误差的原因。
在企业开发中,当涉及到钱的计算时应该使用 BigDecimal 类型来处理,尤其是在金融领域,只要和钱有关的任何逻辑,都是大事,反之没那么严重(只是没那么大)。
·END·
程序员的成长之路
路虽远,行则必至