【问题标题】:How to put infinity and minus infinity in Django FloatField?如何在 Django FloatField 中放入无穷大和负无穷大?
【发布时间】:2009-07-13 13:38:44
【问题描述】:

我试图将无穷大放入 FloatField,但这似乎不起作用。我该如何解决?

f = DjangoModel(float_value=float('inf')) #ok
f.save() #crashes

结果:

Traceback (most recent call last):
...
ProgrammingError: column "inf" does not exist
LINE 1: ... "float_value") VALUES (inf)

我正在使用 Django 1.0.2 和 PostgreSQL 8.3

【问题讨论】:

    标签: python django infinity


    【解决方案1】:

    似乎 Django 的 ORM 对此没有任何特殊处理。值的 Python 表示是 inf 和 -inf,而 PostgrSQL 需要“Infinity”和“-Infinity”。显然 Django 的 ORM 不处理这种转换。

    所以我猜你需要修复 ORM。然后想想其他 SQL 数据库很可能需要其他格式,或者根本不处理无穷大。

    【讨论】:

    • 我想我会用 1e100 作为无穷大...“足够接近”,对吧? :)
    【解决方案2】:

    它应该是“无穷大”,不是吗?但是,我不知道是否可以将其存储在浮点字段中。 float('infinity') 返回 inf,这将是一个 char 字段。

    编辑:不幸的是,如果不深入挖掘,很难说出 Django 使用什么 C 库。我想说弄清楚存储在 float 字段中的值实际上是什么,或者至少确定返回的是什么。如果确实是“inf”,则无法正确存储在浮点字段中。

    【讨论】:

    • float('inf') 和float('infinity') 是一样的,但是不是字符串'inf'或者'infinity'...
    • 看看这个:code.djangoproject.com/ticket/4287 已经有两年了,但我猜那是PostgreSQL本身的问题。
    • 好的,试试 DecimalField 是否正确处理。
    猜你喜欢
    • 2013-11-29
    • 2017-08-19
    • 2022-08-12
    • 2019-03-19
    • 2015-03-22
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多