gpt4 book ai didi

java - 用整数/BigInteger 与 BigDecimal 表示金钱

转载 作者:行者123 更新时间:2023-11-30 06:06:25 32 4
gpt4 key购买 nike

几年前,我帮助编写了一个处理金钱和保险的应用程序。最初,我们用 float 表示货币(我知道这是一个很大的禁忌)。大多数应用程序只是添加和减去值,因此没有任何问题。但是,特定部分涉及货币值(value)的百分比,因此涉及乘法和除法。

我们立即开始遭受浮点错误的困扰,不得不进行重大重构。我们使用了一个任意精度的库来解决这个问题。但是,这并没有改变您最终只能得到几分之一美分的事实。你应该如何舍入?简短的回答是“it's complicated”。

现在我正准备着手开发一个类似的应用程序来取代旧的应用程序。多年来我一直在考虑这个问题。我一直认为最简单的方法是创建一个包含整数(或 BigInteger )的货币数据类型来表示便士的数量,并具有将其打印为传统的、人性化的 $0.00 的功能。格式。

然而,研究这个,我发现JSR 354 ,最近实现的 Java Money API。我很惊讶地发现它用 BigDecimal 来支持它对货币的表示。 .因此,它包含特定的舍入逻辑。

在您的计算中携带几分之一美分有什么好处?为什么我要这样做而不是说一美分是货币的“原子”形式?

最佳答案

这是一个宽泛的问题,因为它的答案因实现而异。

如果我以 5 美元的价格批量购买 1000 件商品,那么每件商品的单价为 0.005 美元,这比您声称的“原子形式”的钱 0.01 美元要少。

如果我们将 0.01 美元视为可能的最低金额,那么我们将无法处理特定情况下的计算,例如我的示例中的情况。

出于这个原因,JavaMoney API 处理许多小数位,确保在这种情况下不会丢失精度。

关于java - 用整数/BigInteger 与 BigDecimal 表示金钱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44053029/

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