提问人:Eduardo Matsuoka 提问时间:2/7/2023 最后编辑:Eduardo Matsuoka 更新时间:2/8/2023 访问量:393
我应该用整数来表示货币吗?[复制]
Should I use Integer to represent currency? [duplicate]
问:
我知道 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
使用整数似乎要简单得多,但是整数解决方案是否适用于任何涉及货币表示的情况?使用整数表示货币时是否有任何权衡?
答:
-1赞
chux - Reinstate Monica
#1
使用整数或十进制之间的权衡
对于加法/减法,它几乎没有区别。
考虑利息/税款计算、等额每月分期付款、未来价值等。
您想使用整数来计算它们吗?
评论
0赞
Eduardo Matsuoka
2/7/2023
您可以使用整数来表示日本货币。他们的最小货币单位是 1 日元,一美元过去的价值约为 100 日元。我确信他们在那里进行这些计算,这就是为什么我要问使用整数的可能性。
1赞
chux - Reinstate Monica
2/7/2023
爱德华多·松冈(Eduardo Matsuoka),这不仅与代表有关,还与计算有关。整数数学不足以进行非平凡的货币计算。你要求权衡取舍,这是其中之一。此外,最低的货币单位不是银行法要求的单位。这些财务规则是以 10 为基数的数学编写的压倒性的。
评论
float
dollars, cents = divmod(total, 100); print(f'{dollar}.{cents:02}')
Decimal
不是万能的:。Decimal(1) / 3 * 3 != Decimal(1)
divmod