Установите точность для числа с плавающей запятой в PHP


Я получаю номер из базы данных, и этот номер может быть либо float, либо int.

Мне нужно установить десятичную точность числа в 3, что делает число не длиннее (относительно десятичных знаков) 5.020 или 1518845.756.

Использование PHP

round($number, $precision)

Я вижу проблему:

Он округляет число. Мне нужна функция, чтобы сокращать только десятичные дроби, не изменяя их значения, которые round( ), похоже, не следуют.

Author: Nick, 2013-11-09

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).

Демо-версия

 13
Author: Amal Murali, 2014-08-03 05:53:54

Это звучит как floor с десятичными дробями. Так что вы можете попробовать что-то вроде

floor($number*1000)/1000
 8
Author: georgecj11, 2013-11-09 12:01:34

Если я правильно понимаю, вы не хотели бы, чтобы происходило округление, и вы хотели бы, чтобы точность была равна 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()

 2
Author: Uours, 2014-08-03 05:33:24