Установить точность для числа с плавающей точкой в ​​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
Другие вопросы по тегам