很好的问题题,一起交流学习哈,我是这样理解的:
首先double本身就不精确,你看到14.29当在计算机里用二进制表示时,它只是无限接近14.29而已,这涉及到二进制小数位表示的方法:
小数部分:0.29 表示二进制方法
0.29*2=0.58 取0[取整数部分做为第一项]
0.58*2=1.06 取1
0.06*2=0.12 取0
0.12*2=0.24 取0
...... 直到值为0或形成循环小数则停止。
从上面可见,小数部分是取之不尽的,所以二进制不能正确表达这个小数部分,因此,它在计算机表示时本身就不是精确的,所以结果也就不精确了。这是所有程序语言都存在的问题,只是有些被封装了解决方法,所以结果是精确的。
在java中想计算精确得用这个类:BigDecimal |