我有一个Django视图,它获取一个值并将其存储在数据库中。 值为176033030 miliarsecs,我必须先将其解析为度,然后才能将其插入数据库。
这是我的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
这是我的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
如果有人能帮助我,我将不胜感激。
答案 0 :(得分:3)
您使用的是python 2吗?在这种情况下,你需要做
latitude = latitude / 3600000.0
longitude = longitude / 3600000.0
在python 2中,如果你除了两个整数,你得到一个整数作为结果。最后添加.0
会使分母浮动。
你也可以float(3600000)
。
另一种选择是使用以下方法从python 3“导入”行为:
from __future__ import division
答案 1 :(得分:1)
为了更清楚一点为什么第一个答案是可行的 - 这里的问题是你要创建一个整数,然后尝试将它强制转换为DB中的decimal.Decimal
当你添加它。关于你在纬度上的输入数字类型有点不清楚,但是在给出的例子中,你将整数除以整数,这给出了一个整数...
如果你这样做:
type(latitude/360000)
,它会输出<type 'int'>
但是,在上面给出的另一个答案中,它将创建一个浮点类型
type(latitude/360000.00)
将输出<type 'float'>
浮点数和小数之间的转换应该是显式的,而不是隐式地完成 - they are not the same thing.考虑到你在这个例子中似乎正在努力的准确性,隐式舍入可能很重要。
更好的路线可能是as per this answer使用:
from decimal import Decimal
Decimal.from_float(latitude/3600000.00)