我应该用整数来表示货币吗?[复制]

Should I use Integer to represent currency? [duplicate]

提问人:Eduardo Matsuoka 提问时间:2/7/2023 最后编辑:Eduardo Matsuoka 更新时间:2/8/2023 访问量:393

问:

这个问题在这里已经有答案了:
10个月前关闭。

这篇文章在 10 个月前被编辑并提交审核,但未能重新打开帖子:

原始关闭原因未解决

我知道 Decimal 或自定义类通常是表示货币的首选方式,但我问它是否也可以使用整数来实现。如果不可能,我想知道为什么。

我知道我们永远不应该使用浮点数来表示货币,因为浮点精度问题:

burger = 1.3
amount = 3
total = burger * amount # 3.9000000000000004

Python 有 Decimal 模块可以解决这个问题:

from decimal import Decimal

burger = Decimal('1.3')
amount = 3
total = burger * amount # Decimal('3.9')
print(total) # 3.9

但也可以选择存储值并使用整数进行数学运算。如果我们需要向人类显示价值,我们只需除以 100 即可将表示形式显示为货币:

burger = 130
amount = 3
total = burger * amount # 390
print(total / 100) # 3.9

使用整数似乎要简单得多,但是整数解决方案是否适用于任何涉及货币表示的情况?使用整数表示货币时是否有任何权衡?

python-3.x 浮点 整数

评论

2赞 chepner 2/7/2023
就像你不应该用于货币一样,你不应该对货币使用浮点运算。.floatdollars, cents = divmod(total, 100); print(f'{dollar}.{cents:02}')
2赞 Scott Hunter 2/7/2023
个人偏好可能不足以凌驾于它们之上。
1赞 chepner 2/7/2023
Decimal不是万能的:。Decimal(1) / 3 * 3 != Decimal(1)
0赞 kindall 2/7/2023
@chepner小心,该解决方案对负数效果不佳。divmod
0赞 fela 2/7/2023
请注意,某些货币有 3 位小数。您需要考虑到这一点以除以 100 或 1000 并存储正确的值。

答:

-1赞 chux - Reinstate Monica #1

使用整数或十进制之间的权衡

对于加法/减法,它几乎没有区别。

考虑利息/税款计算、等额每月分期付款未来价值等。
您想使用整数来计算它们吗?

评论

0赞 Eduardo Matsuoka 2/7/2023
您可以使用整数来表示日本货币。他们的最小货币单位是 1 日元,一美元过去的价值约为 100 日元。我确信他们在那里进行这些计算,这就是为什么我要问使用整数的可能性。
1赞 chux - Reinstate Monica 2/7/2023
爱德华多·松冈(Eduardo Matsuoka),这不仅与代表有关,还与计算有关。整数数学不足以进行非平凡的货币计算。你要求权衡取舍,这是其中之一。此外,最低的货币单位不是银行法要求的单位。这些财务规则是以 10 为基数的数学编写的压倒性的。