2016-04-28 2 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 

Я бы, если кто-то благодарны может мне помочь.

ответ

2

Вы используете python 2? В этом случае вам нужно сделать

latitude = latitude/3600000.0 
longitude = longitude/3600000.0 

В Python 2, если разделить два целых числа, вы получите одно целое число в качестве результата. Добавление .0 в конце делает знаменатель плавающим.

Вы также можете сделать float(3600000).

И еще один вариант «импорт» поведение из питона 3 с помощью:

__future__ import division 
+0

2,7, работает! Спасибо – picador

0

Чтобы быть немного понятнее, почему первым ответ сортировать-оф-работа - проблема здесь в том, что вы создавая целое число, а затем пытаюсь принудить его к 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) 
Смежные вопросы