在PHP中设置浮点数的精度

问题描述 投票:8回答:5

我从数据库中得到一个数字,这个数字可能是floatint。 我需要将数字的小数精度设置为3,这使得数字不长于(关于小数)5.0201518845.756

使用PHP

round($number, $precision)

我看到一个问题:

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

php precision rounding
5个回答
19
投票

您可以使用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)。

Demo


10
投票

它的声音像floor,带小数。所以你可以尝试类似的东西

floor($number*1000)/1000

2
投票

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


1
投票

有关详细信息,请参阅this answer

function numberPrecision($number, $decimals = 0)
{
    $negation = ($number < 0) ? (-1) : 1;
    $coefficient = pow(10, $decimals);
    return $negation * floor((string)(abs($number) * $coefficient)) / $coefficient;
}

-1
投票
$num=5.1239;
$testnum=intval($num*1000)/1000;
echo $testnum; //return 5.123
© www.soinside.com 2019 - 2024. All rights reserved.