例如,命令System.out.println(2.0-1.1);将打印出0.8999999999999999,而不是人们想象的0.9.原因是浮点数是采用二进制数表示的,而在
二进制数中无法精确的表示1/10 。这就好像十进制数无法表示1/3一样。
所以浮点数值不适合用于禁止出现误差的金融计算中。
解决方式:
使用BigDecimal类内置函数:
加法 add()函数 减法subtract()函数
乘法multiply()函数 除法divide()函数 绝对值abs()函数
BigDecimal bd=new BigDecimal(String.valueOf(3.3));
BigDecimal bd2=new BigDecimal(String.valueOf(2.4));
double res=bd.subtract(bd2).doubleValue();//bd-bd2