【问题标题】:numpy float vs decimal.Decimal()numpy float vs decimal.Decimal()
【发布时间】:2018-09-23 20:48:08
【问题描述】:

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

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

【问题讨论】:

  • 您能否添加使用示例。从这里我猜你会很好my_arr = np.array(myDecimals, dtype='float')

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


【解决方案1】:

小数比浮点数精确得多。如果您想查看差异,请打开 Python shell 并尝试:

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

第一个是从浮点数创建的小数,另一个是从字符串创建的。如您所见,float 使用的近似值通常很好,但有时却不行。

因此,要么您应该放弃 Decimal 并使用 float - 这可能是您的最佳选择,因为您想使用 numpy - 或者将小数转换为 float 并返回上面显示的近似值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2023-03-06
    • 2018-07-25
    • 2014-05-25
    • 2021-02-13
    相关资源
    最近更新 更多