首页 > 代码库 > float和double精度问题

float和double精度问题

System.out.println(new BigDecimal(253.90).doubleValue() * 100);
25390.0
精度正确

System.out.println(new BigDecimal(255.90).doubleValue() * 100);
25590.0
精度正确

System.out.println(new BigDecimal(256.10).doubleValue() * 100);
25610.000000000004
精度错误

System.out.println(new BigDecimal(256.80).doubleValue() * 100);
25680.0
精度正确

System.out.println(new BigDecimal(256.90).doubleValue() * 100);
25689.999999999996
精度错误

System.out.println(new BigDecimal(273.90).doubleValue() * 100);
27389.999999999996
精度错误

结论,整数部分小于等于255时,小数部分精度正常;
大于255时,如果小数是.10则精度部分会偏大;
大于255时,如果小数是.90则精度部分会偏小,其他情况精度正确;


System.out.println(256.90 * 100);
25689.999999999996
此问题和BigDecimal没有关系,float和double计算都会有这个问题

所以金额相关的计算一定要用BigDecimal进行运算,再取结果

float和double精度问题