Задать точность для числа float в PHP
Я получаю номер из базы данных, и этот номер может быть либо float
или int
.
Мне нужно установить десятичную точность числа в 3
, что делает число не длиннее (относительно десятичных знаков)5.020
или 1518845.756
.
использование PHP
round($number, $precision)
Я вижу проблему:
он округляет число. Мне нужна функция, чтобы только сократить десятичные дроби, не изменяя их значения, которые round( )
кажется, не следовать.
3 ответов
можно использовать number_format()
для достижения этого:
echo number_format((float) $number, $precision, '.', '');
это будет конвертировать 1518845.756789
to 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()