Python 在Django模型中存储十进制值
我有一个Django视图,它获取一个值并将其存储在数据库中。 该值为176033030 miliarsecs,在将其插入数据库之前,我必须将其解析为度 这是my models.py: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
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)