tyl*_*erl 1 python database django floating-point decimal
虽然这个特定实例中的问题涉及Django和Python,但我想这个问题也出现在其他地方.
浮点值存在精度问题,当用于货币时有时会导致不准确,因此在大多数情况下,固定精度十进制是选择的存储类型.
但是如果价格与非整数数量相结合,例如在发票或收据中.说仙尘成本每克$ 19.99,和客户购买3.5克的东西.价格是十进制,而数量是浮点数.
那总是Decimal(19.99) * float(3.5)
.但是不允许乘以浮点数和小数:
>>> from decimal import *
>>> Decimal(19.99) * float(3.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'Decimal' and 'float'
Run Code Online (Sandbox Code Playgroud)
当然,我们可以先将价格转为浮动价格,但是我们会失去通过将价值存储为小数而获得的任何优势.或者我们可以将数量存储为小数,但这意味着任意选择数量的范围和精度.但是在设计时,开发人员不一定知道数量所需的范围/精度(这就是存在浮点数的原因).有没有更好的办法?
我相信这个问题以前已经解决了; 这种计算的最佳方法是什么?
您可以将float转换为十进制,如下所示:
Decimal(str(float(3.5)))
Run Code Online (Sandbox Code Playgroud)
作为一种解决方法.
使用float的另一个原因是这个有趣的基准测试文章
归档时间: |
|
查看次数: |
805 次 |
最近记录: |