Python 在Django模型中存储十进制值

Python 在Django模型中存储十进制值,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我有一个Django视图,它获取一个值并将其存储在数据库中。 该值为176033030 miliarsecs,在将其插入数据库之前,我必须将其解析为度 这是my models.py: class Position(models.Model): latitude = models.DecimalField(max_digits=50, decimal_places=5, default="") longitude = models.DecimalField(max_digits=5

我有一个Django视图,它获取一个值并将其存储在数据库中。 该值为176033030 miliarsecs,在将其插入数据库之前,我必须将其解析为度

这是my models.py:

class Position(models.Model):
    latitude = models.DecimalField(max_digits=50, decimal_places=5, default="")
    longitude = models.DecimalField(max_digits=50, decimal_places=5, default="")

    def __str__(self):
        return self.latitude
这是my views.py:

def insert_data(request, latitude, longitude):
    latitude = latitude/3600000
    longitude = longitude/3600000

    position_data = Position(latitude=latitude, longitude=longitude)
    position_data.save()

    return HttpResponse()
数据成功地保存在数据库中,但不是小数。 存储值为48和2,它们应为:

latitude = 176033030/3600000 = 48.89806388888889
longitude = 7985131/3600000 = 2.2180919444444442

如果有人能帮助我,我将不胜感激。

您正在使用python 2吗?在这种情况下,你需要这样做

latitude = latitude / 3600000.0
longitude = longitude / 3600000.0
在Python2中,如果将两个整数除,则得到一个整数。在末尾添加
.0
将使分母成为浮点数

您还可以执行浮动(3600000)

另一个选项是使用以下命令从python 3“导入”行为:

from __future__ import division

为了更清楚地解释为什么第一个答案会起作用,这里的问题是,您正在创建一个整数,然后在添加它时尝试将其强制为数据库中的
decimal.decimal
。关于latitude上的输入数字类型有点不清楚,但在给出的示例中,您将一个整数除以一个整数,这将得到一个整数

如果您这样做:

类型(纬度/360000)
,它将输出

但是,在上面给出的另一个答案中,它将创建一个float类型

类型(纬度/360000.00)
将输出

浮点数和小数之间的转换应该是显式的,而不是隐式的-考虑到您在该示例中所使用的精度,隐式舍入可能是重要的

更好的路线可能是,使用:

from decimal import Decimal
Decimal.from_float(latitude/3600000.00)