日期:2014-05-20  浏览次数:20581 次

java 基础奇怪问题
Java code

        double i = 0.80;
        double j = 0.20;
        double k = [color=#FF0000]0.89[/color];
        double f = i+j+k;
        System.out.println(f);


输出结果却是:1.8900000000000001


Java code

        double i = 0.80;
        double j = 0.20;
        double k = [color=#FF0000]0.88[/color];
        double f = i+j+k;
        System.out.println(f);


输出结果却是:1.88
奇怪!!!!!!

------解决方案--------------------
这个没什么奇怪的,精度问题
------解决方案--------------------
double 精度太大了,改float就行了。我估计是二进制转换造成的!
------解决方案--------------------
Java code
double k = [color=#FF0000]0.89[/color];

------解决方案--------------------
无论是double,还是float,二进制位是有限的,很多小数都是无法精确表示的,遂有了这种问题
------解决方案--------------------
精度问题,所以才会有两个double类型的,不能用=来比较,要进行减法操作。
------解决方案--------------------
本来就存在的问题,精度问题。没什么好奇怪的。
------解决方案--------------------
探讨
无论是double,还是float,二进制位是有限的,很多小数都是无法精确表示的,遂有了这种问题

------解决方案--------------------
float与double都有精度问题,所以计算资金问题的时候还是用高精运算那个工具类吧,别用double和float
------解决方案--------------------
嗯嗯 顶楼上 那个类就是 BigDecimal
------解决方案--------------------
探讨

float与double都有精度问题,所以计算资金问题的时候还是用高精运算那个工具类吧,别用double和float

------解决方案--------------------
精度问题,很正常的,所以一般的计算器程序是不能采用float、double类型的,需要采用高精度类型