Установите точность для числа с плавающей запятой в PHP
Я получаю номер из базы данных, и этот номер может быть либо float
, либо int
.
Мне нужно установить десятичную точность числа в 3
, что делает число не длиннее (относительно десятичных знаков) 5.020
или 1518845.756
.
Использование PHP
round($number, $precision)
Я вижу проблему:
Он округляет число. Мне нужна функция, чтобы сокращать только десятичные дроби, не изменяя их значения, которые round( )
, похоже, не следуют.
3 answers
Вы можете использовать number_format()
для достижения этой цели:
echo number_format((float) $number, $precision, '.', '');
Это преобразует 1518845.756789
в 1518845.757
.
Но если вы просто хотите сократить количество десятичных знаков до 3, и не круглый, тогда вы можете сделать следующее:
$number = intval($number * ($p = pow(10, $precision))) / $p;
Поначалу это может показаться пугающим, но концепция действительно проста. У вас есть число, вы умножаете его на 103 ( он становится 1518845756.789
), приведите его к целому числу, чтобы все после 3 знаков после запятой было удалено (становится 1518845756
), а затем разделите результат на 103 ( становится 1518845.756
).
Демо-версия
Это звучит как floor
с десятичными дробями. Так что вы можете попробовать что-то вроде
floor($number*1000)/1000
Если я правильно понимаю, вы не хотели бы, чтобы происходило округление, и вы хотели бы, чтобы точность была равна 3.
Таким образом, идея состоит в том, чтобы использовать number_format()
для точности 4, а затем удалите последнюю цифру:
$number = '1518845.756789';
$precision = 3;
echo substr(number_format($number, $precision+1, '.', ''), 0, -1);
Отобразится:
1518845.756
Вместо:
1518845.757
Ссылки : number_format()
, substr()