Установить точность для числа с плавающей точкой в PHP
Я получаю номер из базы данных, и этот номер может быть либо float
или же int
,
Мне нужно установить десятичную точность числа 3
что делает число не длиннее (относительно десятичных дробей) 5.020
или же 1518845.756
,
Используя PHP
round($number, $precision)
Я вижу проблему:
Это округляет число. Мне нужна функция, чтобы сократить только десятичные дроби, не меняя их значения, которые round( )
Кажется, не следовать.
3 ответа
Ты можешь использовать number_format()
для достижения этой цели:
echo number_format((float) $number, $precision, '.', '');
Это будет конвертировать 1518845.756789
в 1518845.757
,
Но если вы просто хотите сократить количество десятичных разрядов, кратное 3, а не округленное, то вы можете сделать следующее:
$number = intval($number * ($p = pow(10, $precision))) / $p;
Поначалу это может показаться пугающим, но концепция действительно проста. У вас есть число, вы умножаете его на 10 3 (становится 1518845756.789
), приведите его к целому числу, чтобы все после 3 десятичных знаков удалялось (становится 1518845756
), а затем разделите результат на 10 3 (становится 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()
Смотрите этот ответ для более подробной информации.
function numberPrecision($number, $decimals = 0)
{
$negation = ($number < 0) ? (-1) : 1;
$coefficient = pow(10, $decimals);
return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}
$num=5.1239;
$testnum=intval($num*1000)/1000;
echo $testnum; //return 5.123