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

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

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

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

阅读 5.5k
3 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题