黑马程序员技术交流社区

标题: 0.01+0.09为什么不等于0.1呢? [打印本页]

作者: Accoss-x    时间: 2015-12-29 02:36
标题: 0.01+0.09为什么不等于0.1呢?
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))));






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2