在JavaScript中以20(或X)的步长取整?

在JavaScript中以20(或X)的步长取整?,javascript,rounding,Javascript,Rounding,我有从50开始到190结束的数字。步骤通常为20--> 50,70,90。。。。190 现在我从一个文本文件中得到一个数字,它必须根据这个四舍五入。所以如果我得到55,它应该变成70,如果我得到77,它应该是90。如果我得了90分,它当然应该保持在90分。我知道如何做到这一点,包括10个步骤: // 55 --> 60 number = Math.ceil(number / 10) * 10 如何使用20的步骤对我得到的数字进行四舍五入 谢谢 也许是这样的 number = Math.c

我有从50开始到190结束的数字。步骤通常为20-->

50,70,90。。。。190

现在我从一个文本文件中得到一个数字,它必须根据这个四舍五入。所以如果我得到55,它应该变成70,如果我得到77,它应该是90。如果我得了90分,它当然应该保持在90分。我知道如何做到这一点,包括10个步骤:

// 55 --> 60
number = Math.ceil(number / 10) * 10
如何使用20的步骤对我得到的数字进行四舍五入


谢谢

也许是这样的

number = Math.ceil( (number - 50) / 20 ) * 20 + 50;

@Cerburs thx指出,如果您希望以x为增量进行四舍五入,并使用偏移量:

function round(number, increment, offset) {
    return Math.ceil((number - offset) / increment ) * increment + offset;
}
round(51,  20, 10) // 70
round(70,  20, 10) // 70
round(99,  20, 10) // 110
round(100, 20, 10) // 110
或作为一个班轮:

var result=number+20-((number-10)%20) - result-20==number : 0 ? 20;

逻辑是,首先,在数字上加20。以77号为例。77+20=97. 但是,77+20-7=90,你想要什么。7是77和70之间的差值,即之前的有效数字。您可以通过(数字10)%20获得差异。然而,如果一开始的数字是确定的,那么它就不起作用,因此,最后的逻辑是正确的。

迭代方法的可能重复可能涉及
商=190;而(商%n>1)quot-=20一旦这产生假
商+=20将是您的号码。例如,假设n为75,起始商为190。我们在循环中减少20个商,直到条件产生错误…@john:这效率太低了。如果这个函数可以增加到1000万呢?至少从10开始加20,但是如果你也可以接受负数呢?只需使用
Math.round()
.Cerbrus-当然它效率低下,它的迭代性…这就是我的全部观点。关键是逻辑是要得到余数,这是对OP的提示。不需要对余数做任何操作。这不会对数字进行取整。查看另一个答案。只需添加+10即可获得初始“偏移”(以符合数字规则50、70、90…
返回数学。舍入((数字-10)/x)*x+10
@OlafWatteroth:将其添加为答案。@Cerbrus如果OP想要55->70,它不应该是ceil吗,77-90.将
未定义
null
值强制转换为
0
~
是一个按位
not
,当应用于
未定义的
null
时,返回
-1
。而且,
~-1==0
。所以,
~~未定义==0
()
不是必需的。与ceil一起使用而不是圆形@user1856596:添加了
ceil
而不是
round
。谢谢你接受这个答案^ ^:P现在我们得到了相同的代码,你修改了
.ceil
,我修改了你的偏移量+1.anyway@Glutamat:那么这一定是正确的代码:P谢谢你的帮助+1@vsync:这确实不是“适当”的舍入。OP的要求意味着必须使用
ceil
。将
ceil
替换为
round
,以获得所需的结果。
var number;
var a =number-10-((number-10)%20);
var result=a+30;
// does not work if num is 70 or 90 so
if(result-20==number)
Result=number;
var result=number+20-((number-10)%20) - result-20==number : 0 ? 20;