@ubuntu_lts

Как сохранять дроби в int?

$a = 4; // значение из БД
$a *= 1.25; // 5 => int 5
$a->save(); // в столбец типа int сохраняется 5 - норм

$a = 5; // значение из БД
$a *= 1.25; // 6.25 => int 6
$a->save(); // в столбец типа int сохраняется 6 - норм

$a = 6; // значение из БД
$a *= 1.25; // 7.5 => int 7
$a->save(); // в столбец типа int сохраняется 8 - косяк

А кто такой умный придумал разные int для пыха и мускула? :)

Как фиксить такие ситуации?
  • Вопрос задан
  • 128 просмотров
Решения вопроса 2
miraage
@miraage
Вообще-то, 7.5 float = 8 int. Правила округления начальных классов.

Не скажу, как в Вашем случае решить. Есть пример с финансами. На всех проектах, где были денежные операции, бабки хранили в центах. Потом на UI делили на 100.

Можете попробовать по аналогии. Однако не вижу причин изменить тип колонки в базе данных, если логика этого требует.
Ответ написан
BlackBride
@BlackBride
Web developer
Округляйте сами через дополнительный вызов round() с точностью 0 на программном уровне, с указанием константы для задания способа округления

https://www.php.net/manual/ru/function.round.php
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AndryG
Вы пользуетесь неявными преобразованиями СУБД и интерпретатора.
php отбрасывает дробную часть, mysql приводит к целому арифметически - так решили их создатели.

Переведите mysql в strict_mode, если уж и правда шизанутый, получите ошибку типа и займитесь приведением типов самомстоятельно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы