3 * 0.1 == 0.3将会返回什么?

问题:

3 * 0.1 == 0.3将会返回什么?

先说结果:fasle

首先了解下基础知识:

十进制整数转换为二进制整数:"除2取余,逆序排列"

demo如下:

 十进制小数转换成二进制小数采用"乘2取整,顺序排列"

demo如下:

 我们拿10进制下的0.1来说,在二进制中其值大概是:0.10000000000000000555111512312578270211815834045410156

所以说在计算机中我们理解的十进制的0.1被转换成了可能是无穷位小数的二进制。

这就是为什么 3 * 0.1 != 0.3的原因

首先:什么是round-trip?

任何浮点数可以最多被17位十进制数字表示,这意味着如果你转换一个浮点数为十进制字符串需要保留17位数字,这样可以通过这17位数字转换恢复原来的浮点数,这种转换就是round-trip

被打印成长字符串的浮点数比如(0.3,0.8,0.9,1.0)是因为打印出的字符串
(如:0.30000000000000004)是满足round-trip字符串中最短的一个

最后推荐使用:BigDecimal

参考:

https://www.zhihu.com/question/56545018/answer/149620518

一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
原文地址:https://www.cnblogs.com/fengtingxin/p/13951712.html