Как исправить эту ошибку в PHP DB?

$servername = "127.0.0.1"; // IP Вашей базы
$username = "username "; // Имя пользователя mysql
$password = "password "; // Пароль пользователя mysql
$db = "db"; // Название базы данных
$conn = mysqli_connect($servername, $username, $password, $db) or die("Ошибка " . mysqli_error($conn));
$query = "UPDATE `users` SET `balance` = `balance` - 5 WHERE balance > 4"; // Сам запрос.
$q = mysqli_query($conn, $query); // Отправляем запрос.

У меня проблема в том, что если у пользователя например balance = 20.19, то после выполнения скрипта становится 15.1999999999999999991. Как это исправить??

Мне нужно, чтобы после работы скрипта баланс был 15.19


Ответы (1 шт):

Автор решения: Haku Kimura

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

Чтобы избежать этого нужно использовать тип DECIMAL (число с фиксированной точкой), в этом случае целая и дробная части будут храниться как 2 отдельных числа. Также для хранения таких важных данных, как баланс счёта, нужно в обязательном порядке использовать число с фиксированной точкой, т.к. здесь важна каждая цифра после десятичной точки.

Более подробную информацию по числовым типам данных смотрите в Документации MySQL.

→ Ссылка