第一个数字需要四舍五入到最接近的第二个数字。有很多方法可以做到这一点,但最好的和最短的算法是什么?任何挑战者:-)
1244->1200 1254->1300 123->100 178->200 1576->1600 1449->1400 123456->123500 654321->654300 23->00 83->100
输入n
:
(n + 50) / 100 * 100
使用整数除法。
请注意,许多语言/库已经具有执行此操作的功能。
Ruby的圆方法可以消耗负面精度:
n.round(-2)
在这种情况下,-2会使您四舍五入到最接近的百位。
100 * round(n/100.0)
我知道它在游戏中已经很晚了,但是当我处理不得不将事情变为最接近的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并尝试离开以确定要扩展到多远。
如果你使用整数数学,这将做到这一点:
n = (n + 50) / 100 * 100
当然,你没有指定例如1350和1450的行为,所以我选择了整理。如果你需要round-to-even,那就行不通了。
这是家庭作业吗?
通常,mod 100,然后如果> 50则添加其他减法。
根据Pawan Pillai上面的评论,在Javascript中四舍五入到最接近的第100位:
100 * Math.floor((foo + 50) / 100);