四舍五入到最接近的100

问题描述 投票:22回答:7

第一个数字需要四舍五入到最接近的第二个数字。有很多方法可以做到这一点,但最好的和最短的算法是什么?任何挑战者:-)

1244->1200 1254->1300 123->100 178->200 1576->1600 1449->1400 123456->123500 654321->654300 23->00 83->100

algorithm
7个回答
31
投票

输入n

(n + 50) / 100 * 100

使用整数除法。

请注意,许多语言/库已经具有执行此操作的功能。


54
投票

Ruby的圆方法可以消耗负面精度:

n.round(-2)

在这种情况下,-2会使您四舍五入到最接近的百位。


7
投票
100 * round(n/100.0)

4
投票

我知道它在游戏中已经很晚了,但是当我处理不得不将事情变为最接近的nTh时,我通常会设置这些东西:

Number.prototype.roundTo = function(nTo) {
    nTo = nTo || 10;
    return Math.round(this * (1 / nTo) ) * nTo;
}
console.log("roundto ", (925.50).roundTo(100));

Number.prototype.ceilTo = function(nTo) {
    nTo = nTo || 10;
    return Math.ceil(this * (1 / nTo) ) * nTo;
}
console.log("ceilTo ", (925.50).ceilTo(100));

Number.prototype.floorTo = function(nTo) {
    nTo = nTo || 10;
    return Math.floor(this * (1 / nTo) ) * nTo;
}
console.log("floorTo ", (925.50).floorTo(100));

我发现自己使用的是Number.ceilTo(..),因为我正在使用Canvas并尝试离开以确定要扩展到多远。


2
投票

如果你使用整数数学,这将做到这一点:

n = (n + 50) / 100 * 100

当然,你没有指定例如1350和1450的行为,所以我选择了整理。如果你需要round-to-even,那就行不通了。


0
投票

这是家庭作业吗?

通常,mod 100,然后如果> 50则添加其他减法。


0
投票

根据Pawan Pillai上面的评论,在Javascript中四舍五入到最接近的第100位: 100 * Math.floor((foo + 50) / 100);

© www.soinside.com 2019 - 2024. All rights reserved.