Set precision for a float number in PHP
Solution 1
You can use number_format()
to achieve this:
echo number_format((float) $number, $precision, '.', '');
This would convert 1518845.756789
to 1518845.757
.
But if you just want to cut off the number of decimal places short to 3, and not round, then you can do the following:
$number = intval($number * ($p = pow(10, $precision))) / $p;
It may look intimidating at first, but the concept is really simple. You have a number, you multiply it by 103 (it becomes 1518845756.789
), cast it to an integer so everything after the 3 decimal places is removed (becomes 1518845756
), and then divide the result by 103 (becomes 1518845.756
).
Solution 2
Its sound like floor
with decimals. So you can try something like
floor($number*1000)/1000
Solution 3
If I understand correctly, you would not want rounding to occur and you would want the precision to be 3.
So the idea is to use number_format()
for a precision of 4 and then remove the last digit:
$number = '1518845.756789';
$precision = 3;
echo substr(number_format($number, $precision+1, '.', ''), 0, -1);
Will display:
1518845.756
rather than:
1518845.757
Links : number_format()
, substr()
Solution 4
See this answer for more details.
function numberPrecision($number, $decimals = 0)
{
$negation = ($number < 0) ? (-1) : 1;
$coefficient = pow(10, $decimals);
return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}
Mostafa Talebi
TeamLead in Vidoomy Software engineer in areas of Marketplace, AdTech, Distributed Systems, High traffic services, User identity systems and associated areas. Also with experience in setting up Apache Druid clusters, Kafka Cluster, ZooKeeper Cluster, Redis Cluster, Prometheus and Grafana, Monitoring, Nginx load-balancing, AWS EC2, ECS, AWS Networking You can visit my technical info on my linkedin: https://www.linkedin.com/in/mositalebi Or you can visit my github: https://github.com/mostafatalebi https://github.com/mostafatalebi/dynamic-params https://github.com/mostafatalebi/druid-kill-task
Updated on July 09, 2022Comments
-
Mostafa Talebi almost 2 years
I get a number from database and this number might be either
float
orint
.
I need to set the decimal precision of the number to3
, which makes the number not longer than (regarding decimals)5.020
or1518845.756
.Using PHP
round($number, $precision)
I see a problem:
It rounds the number. I need a function to only cut the decimals short, without changing their values which
round( )
seems not to follow.