我从数据库中得到一个数字,这个数字可能是float
或int
。
我需要将数字的十进制精度设置为 3
,这使得数字不超过(关于小数)5.020
或1518845.756
。
使用 PHP
round($number, $precision)
我看到一个问题:
它将数字四舍五入。我需要一个函数来缩短小数,而不更改它们的值,round( )
似乎没有遵循。
您可以使用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
)。
演示
它听起来像是带有小数的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