float和double精度问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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精度问题的主要内容,如果未能解决你的问题,请参考以下文章

java中的float和double的精度问题

FLOAT 和 DOUBLE区别

float和double有啥区别?

float和double精度问题

Java double和 float丢失精度问题

java用double和float进行小数计算精度不准确