Функция вокруг PHP не работает правильно
Функция php round
не работает правильно. У меня есть номер 0.9950
, Я поставил код:
$num = round("0.9950", 2);
И я получаю 1,0? Зачем?? Почему я не могу получить 0.99
?
2 ответа
Вы можете добавить третий параметр в функцию, чтобы она делала то, что вам нужно. Вы должны выбрать один из следующих:
- PHP_ROUND_HALF_UP
- PHP_ROUND_HALF_DOWN
- PHP_ROUND_HALF_EVEN
- PHP_ROUND_HALF_ODD
Эти константы достаточно просты для понимания, поэтому просто используйте адаптированную:) В вашем примере, чтобы получить 0,99, вам нужно использовать:
<?php echo round("0.9950", 2, PHP_ROUND_HALF_DOWN); ?>
Только что протестировал в PHP Sandbox... PHP иногда кажется забавным.
<?php
$n = 16.90;
echo (100*$n)%100, "\n"; // 89
echo (int)(100*$n)%100, "\n"; // 89
echo 100*($n - (int)($n)), "\n"; // 90
echo (int)(100*($n - (int)($n))), "\n"; // 89
echo round(100*($n - (int)($n))), "\n"; // 90
Когда вы вокруг 0.9950
до двух знаков после запятой, вы получите 1.00
потому что так работает округление. Если вы хотите операцию, которая приведет к 0.99
тогда, возможно, вы ищете усечение с плавающей запятой. Один из вариантов усечения числа с плавающей запятой до двух десятичных знаков - умножить на 100, привести к целому числу, а затем снова разделить на 100:
$num = "0.9950";
$output = (int)(100*$num) / 100;
echo $output;
0.99
Этот трюк работает, потому что после первого шага 0.9950
становится 99.50
, который, когда приведен к целому числу становится просто 99
, отбрасывая все после второго знака после запятой в исходном числе. Затем мы снова делим на 100
чтобы восстановить исходное число, минус то, что мы хотим обрезать.