【问题标题】:Multiplication of double values producing unexpected behaviour?双重值的乘法产生意外的行为?
【发布时间】:2018-06-02 01:32:59
【问题描述】:

我正在编写测试用例,其中我看到了以下行为。如果有人可以用外行的话来描述这一点。添加标签 IEEE 754。

70D * 1.1 = 77.0 50D * 1.1 = 55.00000000000001 ?

【问题讨论】:

标签: java double bigdecimal ieee-754


【解决方案1】:

双值有precision problem,你可以使用java.math.BigDecimal得到准确的结果:

System.out.println(new BigDecimal("50").multiply(new BigDecimal("1.1"))); // 55.00

【讨论】:

  • @RudyVelthuis 我试过了。在java version "10.0.1" 上,它工作正常。
  • 这个可以,因为对于valueOf(),Java 使用往返格式。对于其他值,这仍然注定会失败。 valueOf() 并不总是能“纠正”使用 FP 引入的不准确性。
猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
相关资源
最近更新 更多