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开发,越学习越感觉知识太多,自身了解太少,只能不断追寻