在php中有没有什么灵巧的方法可以四舍五入到最接近的有效数字?
所以:
0->0
9->9
10->10
17->10
77->70
114->100
745->700
1200->1000发布于 2011-04-30 00:31:59
$numbers = array(1, 9, 14, 53, 112, 725, 1001, 1200);
foreach($numbers as $number) {
printf('%d => %d'
, $number
, $number - $number % pow(10, floor(log10($number)))
);
echo "\n";
}不幸的是,当$number为0时,这将非常失败,但它确实为正整数产生了预期的结果。而且这是一种仅限于数学的解决方案。
发布于 2011-04-30 00:34:09
这是一个纯粹的数学解决方案。如果您想要向上或向下取整,而不仅仅是向下取整,这也是一个更灵活的解决方案。它在0上有效:)
if($num === 0) return 0;
$digits = (int)(log10($num));
$num = (pow(10, $digits)) * floor($num/(pow(10, $digits)));您可以将floor替换为round或ceil。实际上,如果您想四舍五入到最近的值,您可以进一步简化第三行。
$num = round($num, -$digits);发布于 2011-04-30 00:20:29
如果你真的想要一个数学解决方案,试试这个:
function floorToFirst($int) {
if (0 === $int) return 0;
$nearest = pow(10, floor(log($int, 10)));
return floor($int / $nearest) * $nearest;
}https://stackoverflow.com/questions/5834537
复制相似问题