2013-11-20 5 views
1

В настоящее время у меня есть десятичная (24,16) строка в базе данных mySQL; но когда я сохраняю данные на нем; он меняет значение, которое я вставляю. Насколько я могу сейчас видеть; макс знаков после запятой я должен был бы 16.MySQL decimal (24,16) производит странные результаты

Пример:

  • Я положил в: 5,96666666666667
  • Когда я получить данные, которые он возвращает 5,96666666666666995

ли это смысл? Должен ли я найти ответ в том, как mySQL справляется с этим; или я должен посмотреть в своем коде (Magento), но он был полностью адаптирован для работы с более чем четырьмя десятичными знаками, все, что мне нужно, чтобы выяснить, как сделать сделку с базой данных)

Я знаю, что это не очень конкретный код вопроса мудрый, но я просто пытаюсь обдумать эту проблему :-)

Спасибо, что указал мне в правильном направлении!

+0

Является ли это результатом SQL Query или вы запустили это в PHP? –

+1

Я подозреваю, что ваше значение с фиксированной точкой преобразуется в значение с плавающей точкой где-то в вашем приложении за пределами MySQL. Если вы зависеть от точного значения, вашему приложению придется использовать тип данных, чувствительный к данным с фиксированной точкой (поскольку Magento закодирован на очень слабо типизированном PHP, вам может потребоваться обработать ваше значение как строку). – eggyal

+0

Выводится Magento. Я загляну в него завтра, чтобы узнать, смогу ли я узнать, где происходит конверсия, и вернуться сюда. –

ответ

1

Мне удалось разобраться в этом. Как было предложено, в типе данных строки MySQL не было ничего плохого. Мне удалось отследить его до Magento (точное местоположение кода неизвестно).

Когда я делаю расчеты на аналогичной установке; все работает отлично, поэтому кажется, что предложение @ eggyal было правильным.

Итак, если вы ищете способ заставить Magento работать с более чем четырьмя десятичными знаками; Я бы посоветовал вам прекратить попытки;)

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