JavaScript — PHP floatval, причудливый анализ

У меня есть некоторые расчеты на стороне клиента с 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 для этого столбца.

Заранее спасибо!

1

Решение

3.72 — правильное значение. Результат 3.7199999999999998 вызван неточностью с плавающей точкой в ​​JavaScript (см .: Как бороться с точностью чисел с плавающей точкой в ​​JavaScript?). Я бы предложил использовать toFixed () в вашем коде JavaScript, чтобы избежать этого.

var total = (((3 * 24) / 100) + 3).toFixed(2);
2

Другие решения

3.72 на самом деле правильное значение. Казалось бы, JavaScript имеет ошибку точности при выполнении этого вычисления.

1

По вопросам рекламы [email protected]