乘以double.valueOf(String)* 100会对某些数字产生不良结果

时间:2013-09-03 23:24:50

标签: java

我正在尝试使用Double.valueOf(String s)函数将字符串转换为double并将其乘以100.对于大多数数字,结果正常工作除了一些。例如,如果金额是10.20并且我使用Double.valueOf(10.20)* 100,则结果是1019.9999而不是1020.0。这只发生在10.20,8.20,9.20。它适用于7.20,1.20,11.20等。这是什么原因?以下是我的代码片段

第一种情况

String s =“10.20”; * System.out.println(“双重操作后的值为”+(Double.valueOf(firstHalf) 100));

结果: - 双重操作后的值为1019.9999999999999

实际结果应为1020.0。如果我给出以下内容,它可以正常工作

第二个场景

* String s =“7.20”; System.out.println(“双重操作后的值为”+(Double.valueOf(firstHalf) 100));

结果: - 双重操作后的值为720.0

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

使用BigDecimal

BigDecimal newValue = BigDecimal.valueOf(10.20)
   .setScale(2, RoundingMode.HALF_UP)
   .multiply(BigDecimal.valueOf(100));

答案 1 :(得分:0)

由于Java使用二进制浮点标准来表示浮点数,因此结果不佳。并非每个十进制数都可以表示为二进制分数。 您必须使用java.math.BigDecimal
已在此处解释: Floating point arithmetic not producing exact results

确保对浮点数使用BigDecimal(String)构造函数,避免使用BigDecimal(double)构造函数:
new BigDecimal("10.20").multiply(new BigDecimal(100)).toString()