将变量向上舍入到最接近X的倍数

16

我希望能够以最接近250的倍数向上舍入一个数字。例如,如果我有以下JS:

var containerHeight = $("#container").height();

如果我们假设 "containerHeight" 的值为 680px,我想要一种将其向上舍入为 750px 的方法(如果值为 1007,则应该向上舍入为 1250)。我怀疑这需要比我预期更复杂的解决方案。或者 jQuery 是否有内置函数可以使此操作变得可行?

我认为这更像是一个数学问题而不是一个 jQuery 问题(但我的 jQuery 语法知识也有些有限:)

非常感谢任何想法/帮助,谢谢!


可能是Rounding in steps of 20 (or X) in JavaScript?的重复内容。 - leo
4个回答

32
containerHeight = Math.ceil(containerHeight / 250.0) * 250;

谢谢,詹姆斯!太完美了。 - LearnWebCode
重要的是要注意,这对浮点数不起作用。 - Matthew Marlin
@MatthewMarlin 对于浮点数,这个解决方案可行(不会添加 X.X00000001… 的问题):https://dev59.com/E3I_5IYBdhLWcg3wDOdC#27861660 (这里采用的是四舍五入而不是向上取整,但可以很容易地改成使用 Math.ceil 进行向上取整)。 - Venryx

7
function NearestMultiple(i, j) {
    alert(Math.ceil(i/ j) * j);
}

NearestMultiple(1007, 250); //returns 1250

请查看示例:http://jsfiddle.net/SUya9/1/

或者像James说的那样!

编辑:我看到你想要四舍五入所有时间...更新了示例,但是James只用了1个。


1
谢谢你的帮助,那也完美地解决了问题! - LearnWebCode
请注意,这对浮点数无效。 http://jsfiddle.net/SUya9/15/ - Matthew Marlin
对于浮点数,这个解决方案有效(不会添加X.X00000001...的情况):https://dev59.com/E3I_5IYBdhLWcg3wDOdC#27861660(这是四舍五入而不是向上取整 - 但可以轻松地更改为使用Math.ceil进行向上取整)。 - Venryx

1

对于那些使用整数并希望避免中间浮点数的解决方案的人,请使用以下方法:

int roundedUp = alignment * ((value + alignment - 1) / alignment);

或者没有分割:

int  mod = value % alignment;
if (mod > 0)
   value += (alignment - mod);

0

简单

var rounded = Math.ceil(value / round) * round;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接