Значение с плавающей запятой, сохраненное в MySQL, продолжает портиться - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь хранить значения с плавающей точкой в ​​MySQL, и мои значения, похоже, продолжают портиться.: (
Мои поля определены как float(10,7), и я правильно округляю свои значения в PHP перед вставкой:

$rndval = round($val,7)
INSERT INTO mytable (float) VALUES ($rndval)

Но когда я вставляю значение, такое как 47.5206797, оно отображается как 47.520679 5 в моей таблице. Почему это?

1 Ответ

5 голосов
/ 23 февраля 2012

Если вам нужно точное значение, сохраните его как точный тип данных, такой как DECIMAL(17,7), который обеспечит тот же диапазон, что и FLOAT(10,7). Единственным недостатком является то, что DECIMAL займет больше места на диске, чем эквивалентный FLOAT, однако это тривиально по сравнению с исправлением ошибок с плавающей запятой, где важна точность.

http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

Для получения дополнительной информации о проблемах с числами с плавающей запятой, следующее может стоить прочитать

http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

...