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精度问题的主要内容,如果未能解决你的问题,请参考以下文章