首页 > 代码库 > 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精度问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。