16

我从数据库中得到一个数字,这个数字可能是floatint

我需要将数字的小数精度设置为3,这使得数字不长于(关于小数)5.0201518845.756.

使用 PHP

round($number, $precision)

我看到一个问题:

它将数字四舍五入。我需要一个函数来只缩短小数点,而不改变它们round( )似乎不遵循的值。

4

5 回答 5

31

您可以使用number_format()来实现这一点:

echo number_format((float) $number, $precision, '.', ''); 

这将转换1518845.7567891518845.757.

但是,如果您只想将小数位数减少到 3,而不是round,那么您可以执行以下操作:

$number = intval($number * ($p = pow(10, $precision))) / $p;

起初它可能看起来很吓人,但这个概念真的很简单。您有一个数字,将其乘以 10 3(变为1518845756.789),将其转换为整数,以便删除小数点后 3 位之后的所有内容(变为1518845756),然后将结果除以 10 3(变为1518845.756)。

演示

于 2013-11-09T11:53:53.077 回答
15

它听起来像floor小数。所以你可以尝试类似的东西

floor($number*1000)/1000
于 2013-11-09T12:01:34.520 回答
3

如果我理解正确,您将不希望发生舍入,并且您希望精度为 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()

于 2013-11-09T12:02:29.470 回答
1

有关更多详细信息,请参阅此答案

function numberPrecision($number, $decimals = 0)
{
    $negation = ($number < 0) ? (-1) : 1;
    $coefficient = pow(10, $decimals);
    return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}
于 2019-03-22T10:49:25.330 回答
0
$num=5.1239;
$testnum=intval($num*1000)/1000;
echo $testnum; //return 5.123
于 2019-01-10T07:21:25.297 回答