gpt4 book ai didi

floating-point - 税率是否需要存储为整数?

转载 作者:行者123 更新时间:2023-12-04 04:31:10 24 4
gpt4 key购买 nike

我知道由于舍入错误问题,货币值应作为整数存储和处理。这对我来说很有意义,我明白了(我认为)。

但是税率呢?是否有任何理由需要将税率(不是税额、税率,如 6.5 或 8.125)存储为整数而不是小数?

如果我确实将税率存储为整数,我如何将税率应用于交易中的美元金额?如果我为 6.5% 的税率执行 10000 * 1.065($100.00 * 1.065),那么将 6.5% 存储在数据库中作为 6500 而不是 6.500 会有什么好处?我不认为将一个数字乘以或除以 100 次是容易出现舍入错误的事情。

我如何存储税率有关系吗?

最佳答案

首先,并不是你不应该使用小数。这是您不应该在想要获得确切值的地方使用浮点数。并非所有小数都是浮点数;请参阅 C# 中的十进制数据类型或 Java 中的 java.math.BigDecimal。

其次,10 的幂特别容易受到奇怪的浮点问题的影响,因为实现浮点的方式会导致无限重复小数以除以 10 的幂。参见 this question .这是一个简单的例子:

groovy:000> f = 0.1F // make a floating point number
===> 0.1
groovy:000> f * 100
===> 10.000000149011612

发生这种情况是因为 0.1 的表示是一个被截断的重复小数。这里 REPL 撒了谎,f 中真正的值不是 0.1,而是 0.100000001490116119384765625。

你可以绕过这个然后继续, there's an argument for doing that :

To resolve this issue, you need to provide appropriate rounding. With money this is easy as you know how many decimal places are appropriate and unless you have $70 trillion you won't get a rounding error large enough you cannot correct it.



但是使用 BigDecimals:
groovy:000> d = new BigDecimal("0.1")
===> 0.1
groovy:000> d * 100
===> 10.0

使用定点小数,这样您就可以准确地知道您拥有的数字。如果您的语言没有固定小数(如 Javascript), you may have to fall back on integers .

关于floating-point - 税率是否需要存储为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167262/

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