Я боролся с 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 (), затем разделить на десять, но, как вы можете видеть, я получаю дополнительный .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)
Что работает:)