MySql: преобразование числа с плавающей запятой в десятичное, производящее больше десятичного числа, чем в файле back.sql - PullRequest
1 голос
/ 17 октября 2010

Я хочу понять это: у меня есть дамп таблицы (файл сценария sql) из базы данных, которая использует float 9,2 в качестве типа по умолчанию для чисел.В файле резервной копии у меня есть значение, как «4172.08».Я восстановил этот файл в новой базе данных и преобразовал число с плавающей точкой в ​​десятичное число 20,5.Теперь значение в поле 4172.08008 ... откуда взято 008 ??tnx вообще

Ответы [ 2 ]

4 голосов
/ 17 октября 2010

откуда взято 008 ??

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

Чтобы избежать погрешности, присущей точности с плавающей точкой, приводите сначала к десятичному (9,2), затем до десятичной (20,5).

Длинный ответ:

Числа с плавающей запятой склонны к ошибкам округления в цифровых компьютерах.Это немного сложно объяснить, не бросая много математики, но давайте попробуем: точно так же, как 1/3, представленное в десятичном виде, требует бесконечного числа цифр (это 1.3333333 ...), некоторые числа являются «круглыми»в десятичной системе счисления иметь бесконечное количество цифр в двоичном виде.Поскольку этот формат хранится в двоичном формате и имеет конечную точность, существует неявная ошибка округления, и вы можете столкнуться с такими забавными вещами, как получение 0.30000000000000004 в результате 1.1 + 1.2.

1 голос
/ 17 октября 2010

Это разница между плавающей точкой и десятичной дробью. Float - это двоичный тип, и он не может точно представлять это значение. Поэтому, когда вы конвертируете в десятичное число (как и ожидалось, в десятичный тип), это не совсем оригинальное значение.

См. http://floating -point-gui.de / для получения дополнительной информации.

...