向上舍入到最接近的12的倍数

8
我需要一个JavaScript调用,将数字四舍五入到最接近12的倍数。
一些例子:
1 -> 12
7 -> 12
14 -> 24
27 -> 36
有人知道一个好的方法吗?我所能想到的是,“如果在1-11之间,则变为12。如果在13-23之间,则变为24等。”但这似乎不太有效率。

7
除以12,向上取整,乘以12。 - Pointy
@epascarello 如果这是重复的,我很抱歉,发布之前我没有看到它。 - fullOfQuestions
4个回答

13

使用Math.ceil()函数

var n = 13;
var next = Math.ceil(n/12) * 12;

对于 n < 12,这将四舍五入为 0。 - Hunter McMillen
@HunterMcMillen,那是不正确的,对于所有小于零的值,它不会变成零。它会向零舍入到最接近的12。即-25将变为-24。零将保持不变,因为零是12的倍数。 - epascarello
有趣的是,在许多编程语言中,5/12会得到整数除法的结果。但是在Javascript中,结果似乎保持为浮点数。至少从Chrome中我得到的结果是:5/12 = 0.4166666666666667,而我本来期望得到0。 - Hunter McMillen
@HunterMcMillen 这是因为JavaScript除了使用二进制(如位级)运算符时作为中间步骤外,没有其他数据类型,只有浮点数。 - phant0m

4

对于正整数:

ceiling(n/12.0) * 12

对于负整数:

floor(n/12.0) * 12

对于零:

return 12

如果它是负零呢? ;) - epascarello
4
可能不会,我听说那个数字很少见。 - Hunter McMillen

0
function nearest(i) {
    return Math.floor((i-1)/12)*12+12;
}

+1 for ceil by epascarello which does the same thing but in a cleaner way. epascarello的ceil函数更加简洁,赞一个。 - javabeangrinder

0
function roundIt(n) {
    return Math.ceil(n / 12) * 12;
}

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