#php
#php
Вопрос:
Простой вопрос: Почему такое поведение:
var_dump($calc_product);
var_dump($calc_price);
var_dump(round($calc_product,1));
var_dump(round($calc_price,1));
дает:
float(16.05) float(16.05) float(16) float(16.1)
Спасибо!
Комментарии:
1. Похоже, что первое округляет в меньшую сторону, в то время как второе округляет в большую. Можете ли вы показать некоторый контекст для того, где на самом деле установлены значения с плавающей точкой? Единственное, о чем я могу думать, это о том, что $ calc_product на самом деле равен 16.049999999 или чему-то подобному, который var_dump округляет до 2 десятичных мест.
2. Не удается воспроизвести. Всегда возвращает
16.1
.3. здесь работает идеально :
float(16.05) float(16.05) float(16.1) float(16.1)
4. не знал, что var_dump округляется до 2 десятичных мест.. Проверю это. Спасибо!
5. вы пробовали php.net/manual/en/function.number-format.php
Ответ №1:
Не используйте значения с плавающей точкой ради денег.
Распространенный метод заключается в том, чтобы сохранить цену в пенсах / центах, а затем разделить на 100 при отображении. Это означает, что вместо этого вы можете использовать целочисленную арифметику и позволяет избежать этой проблемы.
Комментарии:
1. Все в порядке! Стоит разобраться в поплавках, но для вещей, которые должны быть абсолютно точными (например, деньги!), они не являются хорошим выбором.