首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在php中向下舍入到最接近的有效数字

如何在php中向下舍入到最接近的有效数字
EN

Stack Overflow用户
提问于 2011-04-30 00:14:09
回答 8查看 4K关注 0票数 5

在php中有没有什么灵巧的方法可以四舍五入到最接近的有效数字?

所以:

代码语言:javascript
运行
复制
0->0
9->9
10->10
17->10
77->70
114->100
745->700
1200->1000
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-30 00:31:59

代码语言:javascript
运行
复制
$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时,这将非常失败,但它确实为正整数产生了预期的结果。而且这是一种仅限于数学的解决方案。

票数 8
EN

Stack Overflow用户

发布于 2011-04-30 00:34:09

这是一个纯粹的数学解决方案。如果您想要向上或向下取整,而不仅仅是向下取整,这也是一个更灵活的解决方案。它在0上有效:)

代码语言:javascript
运行
复制
if($num === 0) return 0;
$digits = (int)(log10($num));
$num = (pow(10, $digits)) * floor($num/(pow(10, $digits)));

您可以将floor替换为roundceil。实际上,如果您想四舍五入到最近的值,您可以进一步简化第三行。

代码语言:javascript
运行
复制
$num = round($num, -$digits);
票数 4
EN

Stack Overflow用户

发布于 2011-04-30 00:20:29

如果你真的想要一个数学解决方案,试试这个:

代码语言:javascript
运行
复制
function floorToFirst($int) {
    if (0 === $int) return 0;

    $nearest = pow(10, floor(log($int, 10)));
    return floor($int / $nearest) * $nearest;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5834537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档