Всем привет, ребята помогите разобраться с округлением дробных чисел у меня есть число к примеру 0,5569 мне нужно чтобы округление шло в меньшую строну 0,556 из имеющихся функций только round подходит но он все равно не правильно округляет , как правильно округлить с минимальными затратами ? round(0.5569, 3, PHP_ROUND_HALF_DOWN) // результат 0.557 round(0.5569, 3, PHP_ROUND_HALF_EVEN) // результат 0.557 floor к целому числу округляет
Почему? Как по мне, то вполне нормальный вариант, хоть и не очень удобный. Еще можно так: PHP: <?php $number = 0.5569; echo bcdiv($number, 1, 3); // 0.556
Как бы эта функция тоже округляет --- Добавлено --- PHP: <?php echo number_format(0.5569, 3, '.', ''); // 0.557
PHP: round(0.5569, 3, PHP_ROUND_HALF_EVEN) // результат 0.557 // а может $result -= 0.001 // результат 0,556
хотя в документации написано, что должно округлять в меньшую сторону. Однако, если у нас число 1,55550 то ($a, 3, PHP_ROUND_HALF_DOWN) округлит до 1,555 , а вот если 1,55551 то уже будет 1.556 х-ня какая-то, походу баг, НАДО ЖДАТЬ ПРОФЕССИОНАЛОВ а пока округляй в большую строну и последнюю цифру уменьшай на 1
number_format помоему он тоже округляет и число 4 знака после запятой как пример а вообще число может колебаться от 0,02 до 0,0000005555221215
может не удачный пример , хотелось бы видить в числах 0,12345988744 число после округления 0,12345 а не 0,12346 или 8,266655599 число после округления 8,2666555 а не 8,2666556
Для таких операция используются функции повышенной точности. Например: https://php.ru/manual/ref.bc.html Как выше уже отметили, PHP: <?php $number = 0.123456789; echo bcdiv($number, 1, 5); // 0.12345 --- Добавлено --- Как вариант для извращенцев: PHP: <?php $number = 0.123456789; $precision = 5; echo substr($number, 0, strpos($number, '.')) . substr($number, strpos($number, '.'), $precision + 1);