Я боролся с функцией PHP ceil(), что дало мне немного неправильные результаты - рассмотрим следующее:
$num = 2.7*3; //float(8.1)
$num*=10; //float(81)
$num = ceil($num); //82, but shouldn't this be 81??
$num/=10; //float(8.2)
У меня есть число, которое может иметь любое количество знаков после запятой, и мне нужно округлить его до одного знака после запятой. то есть 8.1 должно быть 8.1, 8.154 должно быть 8.2, а 8 должно быть оставлено как 8.
Как я достиг этого, так это взять число, умножить его на 10, ceil(), а затем разделить на десять, но, как вы можете видеть, в некоторых случаях я получаю дополнительную 0,1.
Может ли кто-нибудь сказать мне, почему это происходит, и как это исправить?
Любая помощь очень ценится
РЕДАКТИРОВАТЬ: было +=10 вместо *=10: S
РЕДАКТИРОВАТЬ 2: я прямо не упомянул об этом, но мне нужно, чтобы десятичная дробь ВСЕГДА округлялась ВВЕРХ, а не вниз - этот ответ наиболее близок:
rtrim(rtrim(sprintf('%.1f', $num), '0'), '.');
Однако округляет 3,84 до 3,8, когда мне нужно 3,9. Извините, это не было яснее :(
Окончательное редактирование:
В итоге я сделал следующее:
$num = 2.7*3; //float(8.1)
$num*=10; //float(81)
$num = ceil(round($num, 2)); //81 :)
$num/=10; //float(8.1)
Который работает :)