四舍五入到最接近的100

时间:2009-02-25 06:29:18

标签: algorithm

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

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

7 个答案:

答案 0 :(得分:54)

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

n.round(-2)

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

答案 1 :(得分:31)

输入n

(n + 50) / 100 * 100

使用整数除法。

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

答案 2 :(得分:7)

100 * round(n/100.0)

答案 3 :(得分: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并尝试离开以确定要扩展到多远。

答案 4 :(得分:2)

如果您使用整数数学,这将会这样做:

n = (n + 50) / 100 * 100

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

答案 5 :(得分:0)

这是家庭作业吗?

一般来说,mod 100,然后如果> 50加上else减去。

答案 6 :(得分:0)

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