2016-04-28 53 views
1

我有一個Django視圖,它獲取一個值並將其存儲在數據庫中。 值爲176033030 miliarsecs,我必須在將它插入數據庫之前解析它。在Django模型中存儲十進制值

這是我的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 

我會gratefull如果有人能幫助我。

回答

2

你使用python 2嗎?在這種情況下,你需要做的

latitude = latitude/3600000.0 
longitude = longitude/3600000.0 

在Python 2,如果劃分兩個整數,你會得到一個整數結果。最後加上.0會使分母浮動。

你也可以做float(3600000)。 - 這裏的問題是,你

__future__ import division 
+0

2.7,工作!謝謝 – picador

0

要以更清楚一點,爲什麼第一個答案排序的-作品:

而另一種選擇是從Python 3中使用「進口」的行爲創建一個整數,然後試圖在數據庫中強制它加入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)