gpt4 book ai didi

java - 什么时候可以在 Java 中使用浮点类型进行货币计算?

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:46 24 4
gpt4 key购买 nike

我了解到我不能使用浮点类型(Java 中的 float/double)进行货币计算(以及任何其他需要精确结果的计算)。我必须改用 decimal 数字类型(Java 中的 BigDecimal)。

现在,当我可以使用浮点类型时,我感到很沮丧。他们提供任何精度保证吗?假设我想计算一些精度为 0.001 的公式。我怎么知道我是否可以使用浮点类型进行此计算?

最佳答案

您可以在 Java 或其他语言中使用浮点类型,前提是您可以证明您的应用程序可以接受结果。

使用 BigDecimal 本身并不能解决这个问题。例如,假设一个银行账户中有 87.34 美元,并且您必须在年利率为 2.37% 的情况下增加一个月的利息。首先,BigDecimal 不会正确计算月利率,因为您必须将 2.37% 除以 12,而 2.37/12(或 .0237/12)不能精确表示为十进制。其次,即使 BigDecimal 确实正确计算了月利率,并正确计算了 87.34 美元的利息,您可能仍然需要在将其添加到余额之前将该金额四舍五入到一定数量的美分。该舍入的规则可能在某些法律文件中指定,并且可能与 BigDecimal 进行舍入的方式不匹配。

十进制 float 和二进制 float 都能够精确计算许多结果,比您在示例中建议的 .001 精度要精确得多。当以各种方式使用时,两者也可能产生重大错误。

因此,要使用 float ,您必须了解类型可以表示哪些值、浮点运算会出现哪些错误、您将执行哪些操作以及您的应用程序需要什么。通常,可以通过精心设计操作来避免浮点错误。例如,您可以通过将金额缩放为整数值来处理货币(使用 8734 表示 87.34 美元,而不是使用 87.34 表示 87.34)。再举一个例子,你可以证明几个操作的累积误差小于半美分,因此你可以执行这些操作并将最终结果四舍五入到最接近的美分,这将是正确的,因为误差从来都不够大使最终答案不正确。

关于java - 什么时候可以在 Java 中使用浮点类型进行货币计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11870621/

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