在JavaScript中以20(或X)的步长取整?
我有从50开始到190结束的数字。步骤通常为20--> 50,70,90。。。。190 现在我从一个文本文件中得到一个数字,它必须根据这个四舍五入。所以如果我得到55,它应该变成70,如果我得到77,它应该是90。如果我得了90分,它当然应该保持在90分。我知道如何做到这一点,包括10个步骤:在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
// 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;