Используйте Double

у сохранить значения широты и долготы, полученные из Google Maps GeoCoding API, в базе данных MySQL. Значения в формате с плавающей запятой.

12.9274529

77.5905970

И когда я хочу сохранить его в базе данных (которая является типом данных float), он округляет float и сохраняет его в следующем формате:

12,9275

77,5906

Я использую неправильный тип данных? Если да, то какой тип данных я должен использовать для хранения значений широты и долготы?

Обновить :

вот CREATE TABLE по просьбе Аллина

CREATE TABLE `properties` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `description` text,
  `latitude` float DEFAULT NULL,
  `longitude` float DEFAULT NULL,
  `landmark` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `serial` (`serial`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
 Alin Purcaru31 мая 2011 г., 15:21
@ Ибрагим Азар Армар Можете ли вы сделатьSHOW CREATE TABLE или что-то и скажите использовать какой тип данных?
 Ibrahim Azhar Armar31 мая 2011 г., 15:23
@Alin Purcaru, как я уже сказал, он в поплавке.
 jezmck31 мая 2011 г., 15:18
Вы на самом деле пробовали другие типы данных?
 Ibrahim Azhar Armar31 мая 2011 г., 15:21
@jezmck Я бы просто использовал varchar, и он должен был работать, но поскольку широта и долгота являются значениями с плавающей запятой, нет смысла использовать тот тип данных, который мне нужен. То, что я хочу знать, это правильный тип данных для хранения этого типа значений.
 Alin Purcaru31 мая 2011 г., 15:27
@Ibrahim Azhar Armar Я просто хотел убедиться, что вы действительно использовалиFLOAT тип данных.

Ответы на вопрос(7)

Использоватьpoint наберите и увидите:

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

Для общего обсуждения см .:http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html

Некоторые ребята создали специальный UDF для вычисления расстояний между точками на сфере (то есть на земле)
Видеть:http://www.lenzg.net/archives/220-New-UDF-for-MySQL-5.1-provides-GIS-functions-distance_sphere-and-distance_spheroid.html

Вот как это сделать:http://howto-use-mysql-spatial-ext.blogspot.com/2007/11/using-circular-area-selection.html

 Johan31 мая 2011 г., 16:34
 Johan31 мая 2011 г., 16:34
@Ibrahim, должен сопротивляться с помощью lmgtfy, должен сопротивляться .....

double

float не хватает необходимой точности, чтобы сохранить это количество цифр после десятичной точки.doubleХотя не всегда гарантировано наличие 7 десятичных разрядов для всех чисел, они будут иметь место, где слева от десятичного знака будет не более 8 цифр, поэтому они должны соответствовать вашим потребностям.

 Brad31 мая 2011 г., 15:26
Double работает нормально ... это то, что я использую для координат в моей БД в любом случае.
 Brad31 мая 2011 г., 15:30
@ Алина, конечно нет, но я не вижу проблем с использованием double. Можете ли вы уточнить?
 Alin Purcaru31 мая 2011 г., 15:24
-1Double это почти то же самое, чтоFloatТолько с большей точностью.
 Billy Moon31 мая 2011 г., 15:42
Если указанные координаты являются векторами, которые оборачиваются вокруг света несколько сотен раз, то double будет терять точность, так как число слева от десятичной дроби начнет уменьшать количество свободного места после десятичной дроби, но для векторов, которые не оборачиваются вокруг мир слишком много раз не должен терять точность и должен быть достаточно форматом для математической обработки
 Denis de Bernardy31 мая 2011 г., 15:28
@Alin: основываясь на этом вопросе, ОП неправильно сообщает, что его таблица используетfloat тип - точность 6 чисел против 15 дляfloat предполагает, что он в настоящее время используетreal.
Решение Вопроса

десятичный если вы не хотите, чтобы числа были приблизительными.

Типы с фиксированной точкой (точное значение)

Типы DECIMAL и NUMERIC хранят точные числовые значения данных. Эти типы используются, когда важно сохранить точную точность, например, с денежными данными.

А теперь ответ "вот и ты":

использованиеDECIMAL(10,7), где10 общее количество цифр в числе и7 количество цифр после., (Это означает, что до того, как точка будет3 цифры.)

Отрегулируйте эти числа по мере необходимости. Такжепожалуйста взгляните на ручную запись, на которую я ссылался ранее в ответе.

 Ibrahim Azhar Armar31 мая 2011 г., 16:31
после тестирования и игры с числами с плавающей запятой, двойными и десятичными, я счел уместным использовать DECIMAL. благодарю вас :)
 maliayas14 дек. 2012 г., 22:52
(10, 7). Хорошие цифры.
 Billy Moon31 мая 2011 г., 21:52
Мой ответ был двойным, набрал больше голосов «за» (+6 - и -3 голоса) - у людей смешанные чувства по этому поводу. Я думаю, что все сводится к приоритетам, но, вероятно, не имеет большого значения в этих обстоятельствах, оба идеально подходят для задачи. Интересная тема, хотя, хороший шанс для обсуждения по этому вопросу.

Используйте Double

CREATE TABLE `properties` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `description` text,
  `latitude` Double DEFAULT NULL,
  `longitude` Double DEFAULT NULL,
  `landmark` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `serial` (`serial`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

8) более чем достаточно. Некоторые устройства GPS обеспечивают более точное положение.

 VGE31 мая 2011 г., 15:31
Десятичное число имеет фиксированную точность.
 Alin Purcaru31 мая 2011 г., 15:46
DECIMAL (2,8) не является действительной декларацией. Ты наверное имел ввидуDECIMAL (10,8).
 Fredrik31 мая 2011 г., 15:30
Я знаю, но вы не потеряете замечательный объем памяти.
 Fredrik31 мая 2011 г., 15:57
Спасибо, я так устала сегодня
 Brad31 мая 2011 г., 15:29
Ни один GPS не может обеспечить такую ​​высокую точность. Тот факт, что рассчитанная позиция содержит дополнительные цифры, не означает, что они не просто шум. За 6 цифрами это очень точное исправление.

чтобы этодвойная точность float вместо одинарной точности:

alter table properties modify latitude double, modify longitude double;

8), имейте в виду, что lat / lng может быть> 99

Ваш ответ на вопрос