JAVA中double和float类型精度丢失的主要原因:
我们所定义或者获取的double或float型数据其实是十进制的,计算机不能直接进行计算,需要将它转换成二进制才能识别计算;然而在转换成二进制的过程中,我们知道十进制整数转化为二进制(除2取余,逆序排列);
但是如果double和float类型值为小数的时候,十进制小数转二进制小数(乘2取整,顺序排列);比如double=0.8的时候,这种算法就会无限循环下去,导致精度丢失。
解决办法就是用BigDecimal(String val)来计算。