Sql не сохраняет правильные значения с плавающей точкой - PullRequest
0 голосов
/ 04 июня 2019

Я сохраняю толщину, длину и ширину и координаты определенных объектов, все эти значения являются числами с плавающей точкой.

Когда я пытаюсь сохранить их в базе данных sql, значение, подобное 39.888, сохраняется как 1.0000000 * 1003.*

Я изменил столбцы sql с double на float, но он ничего не изменил.

Это код, который я пытаюсь загрузить в базу данных

INSERT INTO items (
  Cod, Date, TownHall, Parish, Place, 
  Epoch, RawMaterial, Description, Base, Technology, 
  Length, Width, Thickness, Latitude, Longitude, 
  Bibliography, Image) 
VALUES (
  1, '2019-05-17', 'Idanha-a-Nova', 'Ladoeiro', 'Oliveiras',
  'Idade do Bronze', 'Sílex', 'Indeterminado', 'Núcleo', 'Núcleo',
  2.9, 3.4, 0.8, 39.809484, -7.23707,
  'Apresenta Desgaste', @img)

1.000000000000 и-1,00000000 показаны правильными значениями

enter image description here enter image description here

1 Ответ

4 голосов
/ 04 июня 2019

Прежде всего, float ненадежен, и вы должны использовать DECIMAL(x,y) для хранения ваших координат.

Во-вторых, даже при использовании float ваше определение float(x,x) неверно. Это в основном означает, что перед десятичным разделителем стоит NO цифр и x десятичных цифр. При попытке поставить 39.888 вы должны получить ошибку:

ERROR 1264 (22003) at line x: Out of range value for column 'Latitutde'

В некоторых конфигурациях это только предупреждение, и оно пытается ввести число, ближайшее к разрешенному. Это было бы 0.99999(9) или -0.99999(9). Но, поскольку числа с плавающей точкой неточны, они читаются как 1.0 и -1.0.

Это должно быть float(x,y), где x - общее допустимое количество цифр, а y - количество десятичных цифр.


Короткий ответ:

Например, : используйте DECIMAL(8,6), чтобы работал 39.809484 - всего 8 цифр и 6 десятичных знаков.

Обычно координаты должны храниться как:

широта - DECIMAL(10, 8), как это может быть в диапазоне от -90 до +90 градусов

lng - DECIMAL(11, 8), как может быть в диапазоне от -180 до +180 градусов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...