四舍五入正确到小数点后 2 位,但如果非常接近,则将其设置为最接近的整数

Posted

技术标签:

【中文标题】四舍五入正确到小数点后 2 位,但如果非常接近,则将其设置为最接近的整数【英文标题】:Round correct to 2 decimal places but if very close, set it to nearest integer 【发布时间】:2016-11-18 10:36:13 【问题描述】:

只有当数字非常接近时,数字才四舍五入到最接近的整数值是否有任何功能或可能性。例如:

$var = 18.99;
$res = round($var, 2); // output: 18.99, expected - 19

我已经尝试过不带第二个参数的 round,但是 18.65 会失败。

$var = 18.99;
$res = round($var); //output - 19

$var = 18.65;
$res = round($var); //output - 19, expected 18.65

我只是想让.9 范围将其elt 转换为下一个int 值。这可能吗?

【问题讨论】:

您需要的确切舍入规则是什么?如果数字是 18.98 或 18.69 怎么办? 没有。没有一个内置函数可以完全满足您对特定用例的要求。是否可以自己编写。当然。 18.69 应该是 18.69,但 18.98 应该是 19。基本上所有的 .9 都应该转换为下一个 int 值 如果所有的 X.9X 都应该转换为下一个 int 值,您可以使用正则表达式。 10.05 的期望是什么? 【参考方案1】:

这基本上将任何值四舍五入到最接近的整数,然后检查两者的差异与限制。

function nearly_round($value, $limit = 0.1)  
    $rounded = round($value); 
    //Check the difference. If less than the limit, 
    //return the rounded value, else the original number.
    return abs($rounded - $value) < $limit ? $rounded : $value; 


echo nearly_round(-0.9); // -1
echo nearly_round(-0.8); // -0.8
echo nearly_round(0.8);  // 0.8
echo nearly_round(0.9);  // 1

【讨论】:

以上是关于四舍五入正确到小数点后 2 位,但如果非常接近,则将其设置为最接近的整数的主要内容,如果未能解决你的问题,请参考以下文章

vb中取值(小数点后2位)的函数是啥?

如何四舍五入到最接近的十分位?

Oracle常用函数

oracle_round

四舍五入到最接近的 N 数

Magento 2 / 价格和小计 4 位小数 但增值税和总计 2 位小数