2010-04-27 2 views
1

Так у меня есть SQL настройки таблицы как таковойMySQL плавающие значения прыгают вокруг на вставке?

CREATE TABLE IF NOT EXISTS `points` (
    `id` int(11) NOT NULL auto_increment, 
    `lat` float(10,6) NOT NULL, 
    `lng` float(10,6) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

И Im вставляя такие вещи, как

INSERT INTO `points` (`lat`, `lng`) VALUES ('89.123456','-12.123456'); 

дает мне строку с лат и LNG быть 89.123459 и -12.123455

Что вверх?

ответ

3

В компьютерах значение «float» хранится как число, умноженное на число в квадрате, а некоторые числа не могут быть сохранены точно так, как указано. Если вам это нужно точное, вы должны сохранить его как DECIMAL (8,6)

1

FLOAT типы данных имеют закругление эффекты, потому что не каждый дробным основанием 10 число может быть представлено в формате базового 2 IEEE 754. Для эта причина, FLOAT и DOUBLE PRECISION следует рассматривать как неточные цифры типы данных.

чтения: «Что каждый ученый должен знать о арифметики с плавающей точкой» (http://www.validlab.com/goldberg/paper.pdf)

+1 к @ ответ MindStalker в - использовать NUMERIC или DECIMAL если вам нужны точные числовые типы данных.

Смежные вопросы