У меня есть некоторые расчеты на стороне клиента с JavaScript.
общая сумма = (((3 * 24) / 100) + 3); // результат 3.7199999999999998
Мне нужно хранить это 3.7199999999999998
номер в базе данных как есть.
База данных находится на MySQL, я использую Doctrine 2 для ORM, а для сущности установлена точность /** @Column(type="decimal", precision=32, scale=16, nullable=false) * */
, но после сохранения я вижу, что в базе данных есть только число 3.72
, WTF? После некоторой проверки я обнаружил, что доктрина использует floatval
и после выполнения этого floatval(3.7199999999999998)
ты получаешь 3.72
!! Зачем?
Есть ли обходной путь для этого? как сказать доктрине не использовать floatval и хранить значение как есть? также я не хочу использовать varchar для этого столбца.
Заранее спасибо!
3.72 — правильное значение. Результат 3.7199999999999998 вызван неточностью с плавающей точкой в JavaScript (см .: Как бороться с точностью чисел с плавающей точкой в JavaScript?). Я бы предложил использовать toFixed () в вашем коде JavaScript, чтобы избежать этого.
var total = (((3 * 24) / 100) + 3).toFixed(2);
3.72 на самом деле правильное значение. Казалось бы, JavaScript имеет ошибку точности при выполнении этого вычисления.