Удалить цифры после двух десятичных знаков, не округляя число, используя переполнение стека

Мой номер: 53.199999999999996

Я попробовал все это:

sprintf("%01.2f", $number); // 53.20
sprintf('%0.2f', $number); // 53.20
floor(($number * 100)) / 100; // 53.2
intval(($number * 100)) / 100; // 53.2

Я хочу: 53.19

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

0

Решение

Вы можете использовать number_format (): http://php.net/number_format

$number = 53.1999999
echo int() number_format((float)$number, 2, '.', '');
//53.19

Вам нужен floor () таким образом:

echo floor($number*100)/100;

Или вы приведете к целому числу:

echo 0.01 * (int)($number*100);

Таким образом, он не будет округляться.

2

Другие решения

вы должны установить точность (с плавающей запятой) перед установкой этого числа с плавающей запятой

ini_set('precision', 17);

$number = 53.199999999999996;
$number = ($pos = strpos($number,'.')) ? substr($number,0,$pos + 3) : number_format($number);
echo $number ;

выход :

53,19

Ссылка на сайт

PHP круглые числа с плавающей запятой с этим параметром, если вы устанавливаете переменную без кавычек, например:

$number = 53.199999999999996;
echo $number;

PHP округлит это число
после var_dump, print, echo, … вывод будет:

53,2

наши вы можете установить числовое значение с цитированием

$number = '53.199999999999996';
echo $number;

PHP не округляет это, потому что теперь это строка!

2

Я проверил и использую intval его работы на php версии 5.3, однако вы упомянули, что он не работает с вашей стороны.

$number = 53.1999999;
echo intval(($number*100))/100;
0
По вопросам рекламы [email protected]