numpy float vs decimal.Decimal()

时间:2018-04-13 13:12:39

标签: python-2.7 numpy django-rest-framework

我的问题是关于标准float python类型与decimal.Decimal()的使用。我试图通过API公开本地python包。 Django rest框架的序列化过程返回我Decimal类型,因为内置字段DecimalField能够执行基本验证。

如果我将我的内部函数应用于numpy Decimals数组则失败。但是,如果我首先将它们转换为花车,一切都像魅力一样。因此,问题是:对于使用某些numpy功能的函数,使用Decimal类型是不是可以保存?如果您最终想调用某些numpy功能,那么在django中进行验证的标准是什么?如果Decimal不是numpy的选择那么你基本上可以忘记在Django中验证的DecimalField

1 个答案:

答案 0 :(得分:2)

十进制比浮点数精确得多。如果你想看到差异,打开一个Python shell并尝试:

>>> from decimal import Decimal
>>> Decimal(0.3)
Decimal('0.299999999999999988897769753748434595763683319091796875')
>>> Decimal('0.3')
Decimal('0.3')
>>> 

第一个是从浮点数创建的小数,另一个是从字符串创建的。正如你所看到的,浮动使用的近似值通常很好,但有时候不是。

所以要么你应该删除Decimal并使用float - 可能是你的情况下最好的选项,因为你想使用numpy - 或者将小数法转换为float并返回上面显示的近似值。