首页 > android上做了一个计算器 计算小数值的时候出现问题

android上做了一个计算器 计算小数值的时候出现问题

列如:9.6 * 9
理应得到 86.4
结果是 86.399999999999

我知道好像是因为有些小数在计算机中的表示不是准确值,所以会出现这种情况。

但是我想得到 86.4 这样的结果,因为算出来的数不确定有几位小数,所以也不好设 double 小数点后的位数,求大神解答疑惑。


用BigDecimal

BigDecimal a = new BigDecimal(Double.toString(9.6));
BigDecimal b = new BigDecimal(Double.toString(9));
System.out.println("" + a.multiply(b));

Output:
86.40


java的float不是一个精确的数值,9.6只是一个无限接近于9.6的数。1.0也是一个无限接近于1.0的小数。
想要得到精确的数字我知道的可以用BigInteger,BigFloat这样的类来解决。


继续推荐我的博客:

所以,使用 BigDecimal 类。

对于 @besto 的回答。看过 JDK 文档和源码的都应该知道 Double.toString(9.6) 有很大的安全隐患。因为浮点数 9.6 本来就不是精确的。

正确的写法:

BigDecimal a = new BigDecimal("9.6"));
BigDecimal b = new BigDecimal("9"));
System.out.println("" + a.multiply(b));
【热门文章】
【热门文章】