gpt4 book ai didi

java - Scala double 加法给出了不同的答案

转载 作者:行者123 更新时间:2023-12-02 11:17:06 24 4
gpt4 key购买 nike

我正在尝试金融应用程序,其中贷方和借方总和为 0

为什么会这样

scala> 7595.00-8544.38+949.38
res7: Double = 7.958078640513122E-13

但是在排序和添加时

scala> 7595.00+949.38-8544.38
res8: Double = 0.0

问题是数字是随机的,但它们的总和总是

我对节点做了同样的事情,并发现了相同的结果。问题是什么。

我写了这个函数,它可以工作

def sum(xs: List[Double]): Double = {
xs match {
case x :: tail => BigDecimal(x + sum(tail)).setScale(2,BigDecimal.RoundingMode.HALF_UP).toDouble
case Nil => 0
}
}

虽然很奇怪..

最佳答案

float 并不是底层值的精确表示。这只是 float 如何以二进制编码的事实。

有关更多信息,请查看wikipedia article .

如果您想要精确,请使用 BigDecimal :

 scala> BigDecimal(759500,2) - BigDecimal(854438,2) + BigDecimal(94938,2)
res1: scala.math.BigDecimal = 0.00

关于java - Scala double 加法给出了不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com