Intereting Posts
Супервизор добавляет несколько процессов для PHP и Gearman Есть ли у кого-нибудь рекомендации для хорошей (и легкой!) Библиотеки почтовых программ PHP? В чем разница между escapeshellarg и escapeshellcmd? Что все эти операторы SQL в Laravel? Проверка загрузки файлов только при записи создает, а не редактирует WordPress: получить информацию об авторе из сообщения id Использование xPath для доступа к значениям simpleXML Приоритет оператора concat и идентификатора float '.' (T_CONSTANT_ENCAPSED_STRING, T_DNUMBER) Regex для вызова функции? Торговая площадка Braintree – Что произойдет, если Master Merchant взимает плату с клиента во время продажи, но должен заплатить доспелому Прямая передача файла обновления В magento 1.9.0.0 как можно включить подсказку с шаблоном? htaccess переписать URL-адрес с разных страниц Как отключить глобальные переменные. Как добавить массив к каждому элементу другого массива с моим выбором ключа и значения (в php)?

PHP вокруг половины вверх не работает

У меня есть этот код

<?php echo round(0.572,2,PHP_ROUND_HALF_UP);?> 

Я хочу округлить два десятичных знака до половины, я ожидаю, что значение равно 0,58 … но вышеприведенный код печати 0.57

Как я могу это сделать?

Solutions Collecting From Web of "PHP вокруг половины вверх не работает"

если вы ожидаете 0,58, вам не нужно использовать «половину раунда», но функция «Потолок»

 $v = 0.575; echo ceil($v * 100) / 100; // show 0,58 

Значение 0.572 не может быть округлено до 0.58 , потому что третье число в 2 , меньше половины (или 5 ). Если вы делаете round(0.575, 2, PHP_ROUND_HALF_UP) вы получите 0.58 . В этом случае 0.57 является правильным округленным значением.

Если вы хотите всегда округлить до третьего десятичного знака, независимо от его значения, вы можете использовать ciel() вместо этого, но для этого требуется небольшая дополнительная математика. Простая функция для демонстрации округления всегда была бы …

 function forceRoundUp($value, $decimals) { $ord = pow(10, $decimals); return ceil($value * $ord) / $ord; } echo forceRoundUp(0.572, 2); // 0.58 echo forceRoundUp(0.57321, 4); // 0.5733 
 function round_up($value, $places) { $mult = pow(10, abs($places)); return $places < 0 ? ceil($value / $mult) * $mult : ceil($value * $mult) / $mult; } echo round_up(0.572,2); 

Надеюсь, это сработает для вас!