gpt4 book ai didi

即使使用缩放值,Javascript 金融浮点也会出现错误

转载 作者:行者123 更新时间:2023-12-03 02:57:32 35 4
gpt4 key购买 nike

据我所知,在 Javascript 中管理资金的最佳实践是将所有值缩放到尽可能低的面额(例如,$12.45 缩放为 100,并在我们的代码中表示为 1245 ,而不是12.45),然后在计算时将值四舍五入到最接近的整数。

但是,我们在计算值时仍然遇到问题。

例如:用户支付28.75 美元,但使用30% 的折扣

我们这样处理:Math.round(2875 * .7)。但这计算出2012年的结果(不正确)。这是因为:

  • 在现实生活中,2875 * .7 = 2012.5,四舍五入到 2013 年
  • 在 Javascript 中,2875 * .7 = 2012.4999999999998,四舍五入到 2012

防止此类错误的最佳方法是什么?

最佳答案

这里的问题不是 float 而是固定精度。您可以看到这一点,因为整数运算也会出现同样的问题。任何带有整数运算的分数也会导致错误。

解决方案是您需要正确设计每个操作,并准确了解它正在做什么。这是因为无论是固定精度还是 float 精度,都无法仅以固定精度正确计算一般数学运算。没有通用的一刀切解决方案,因此您必须针对您的特定需求设计解决方案。

在应用折扣的情况下,一种方法是利用折扣值域的知识来按一个因子缩放数字,从而在准备最终结果之前避免出现分数。例如,如果所有折扣都是整数百分比(30%、17%、,但不是 33.33%),那么您可以乘以 100 使它们成为整数(30、17、... ) 而不是分数 (.30, .17,…)。然后乘以整数。最后,除以乘数(根据需要进行舍入)。

关于即使使用缩放值,Javascript 金融浮点也会出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551401/

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