四舍五入正确到小数点后 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 位,但如果非常接近,则将其设置为最接近的整数的主要内容,如果未能解决你的问题,请参考以下文章