列如:9.6 * 9
理应得到 86.4
结果是 86.399999999999
我知道好像是因为有些小数在计算机中的表示不是准确值,所以会出现这种情况。
但是我想得到 86.4
这样的结果,因为算出来的数不确定有几位小数,所以也不好设 double
小数点后的位数,求大神解答疑惑。
列如:9.6 * 9
理应得到 86.4
结果是 86.399999999999
我知道好像是因为有些小数在计算机中的表示不是准确值,所以会出现这种情况。
但是我想得到 86.4
这样的结果,因为算出来的数不确定有几位小数,所以也不好设 double
小数点后的位数,求大神解答疑惑。
java的float不是一个精确的数值,9.6只是一个无限接近于9.6的数。1.0也是一个无限接近于1.0的小数。
想要得到精确的数字我知道的可以用BigInteger,BigFloat这样的类来解决。
用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
15 回答8.4k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
继续推荐我的博客:
所以,使用
BigDecimal
类。对于 @besto 的回答。看过 JDK 文档和源码的都应该知道
Double.toString(9.6)
有很大的安全隐患。因为浮点数9.6
本来就不是精确的。正确的写法: