-4

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

第一种情况

字符串 s = "10.20"; *System.out.println("双重操作后的值为" +(Double.valueOf(firstHalf) 100 ));

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

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

第二个场景

*字符串 s = "7.20"; System.out.println("双重操作后的值为" +(Double.valueOf(firstHalf) 100 ));

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

任何帮助,将不胜感激

4

2 回答 2

0

利用BigDecimal

BigDecimal newValue = BigDecimal.valueOf(10.20)
   .setScale(2, RoundingMode.HALF_UP)
   .multiply(BigDecimal.valueOf(100));
于 2013-09-03T23:30:33.450 回答
0

你会得到不好的结果,因为 Java 使用二进制浮点标准来表示浮点数。并非每个十进制数都可以表示为二进制分数。您必须使用java.math.BigDecimal
此处已解释: 浮点算术不产生精确结果

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

于 2013-09-03T23:30:54.120 回答