A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Accoss-x 中级黑马   /  2015-12-29 02:36  /  804 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test{
        public static void main(String[]args){
          double a = 0.01, b = 0.09;
                System.out.print(a+b);
        }
}
其实因为当计算机内存里要表示小数时丢失了精度。
double还是float都会遇到这个问题
例如:
float的0.1二进制形式是001111011 10011001100110011001101,
根据符号位换算为10进制表达的值精确应该是这样计算 110011001100110011001101乘以2的负27次方,
实际值是0.100000001490116119384765625,这样就产生了实际误差。


解决办法:
System.out.println(new BigDecimal(Double.toString(0.05)).add(new BigDecimal(Double.toString(0.01))));

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马