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

java float 精度问题
这么解决这个float丢失精度的问题
  float f = 1.1f;
  f =  f-0.1f;
 System.out.println(f);
这个时候输出的是0.999999而不是1  这个如何让他输出1,谢谢!

------解决方案--------------------
了解一下java.math.BigDecimal
注意需要用它接收String参数的构造方法。
------解决方案--------------------
我的在eclipse j2ee版中输出是1.0
------解决方案--------------------
浮点数运算用BigDecimal
------解决方案--------------------
引用:
我的在eclipse j2ee版中输出是1.0
测试了下LZ的代码  结果确切的说是:1.0   不知道在什么环境下输出0.9999999?
------解决方案--------------------
java.math.BigDecimal

------解决方案--------------------
我工作用的环境是 STS2.9, JDK7.0.09.
输出结果也是1.0.
同问,什么情况下会输出0.999999?

------解决方案--------------------
System.out.println(new BigDecimal("1.1").subtract(new BigDecimal("0.1")));

并不是所有的小数都可以用二进制浮点数精确表示。LS几个输出1.0的可以换成1.1-0.2试试。
在需要精确答案的地方,避免使用float 和double。
对于货币计算,要用int, long和BigDecimal
------解决方案--------------------
嗯,用大数据类型,精度就不会丢失
------解决方案--------------------
十进制数的二进制表示可能不够精确,浮点数或是双精度浮点数无法精确表示的情况并不少见。浮点数值没办法用十进制来精确表示的原因要归咎于CPU表示浮点数的方法。这样的话您就可能会牺牲一些精度,有些浮点数运算也会引入误差。