8 votes

Arrondir par pas de 20 (ou X) en JavaScript ?

J'ai des nombres qui commencent à 50 et se terminent par 190. Les étapes sont toujours 20 -->

50, 70, 90, .... 190

Maintenant, je reçois un nombre d'un fichier texte qui doit être arrondi en fonction de ceci. Ainsi, si j'obtiens 55, il doit devenir 70, si j'obtiens 77, il doit être 90. Si j'obtiens 90, il doit bien sûr rester 90. Je sais comment le faire par étapes de 10 :

// 55 --> 60
number = Math.ceil(number / 10) * 10

Comment arrondir le nombre que j'obtiens en utilisant des étapes de 20 ?

Merci !

25voto

Cerbrus Points 20704

Si vous voulez arrondir par incréments de x, avec un décalage :

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

3voto

C5H8NNaO4 Points 4435
function round(number,x,o) {
 o = ~~(o);
   return o + Math.ceil((number - o)/ x ) * x 
 }
 console.log(round (55,20,10)) //70
 console.log(round (77,20,10)) //90
 console.log(round (90,20,10)) //90

@Cerbrus thx pour le signaler

1voto

Spin0us Points 323

Peut-être qu'avec quelque chose comme ça

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

1voto

Bob Points 145
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;

Ou en une phrase :

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

La logique veut que l'on ajoute d'abord 20 au nombre. Prenons le nombre 77. 77+20=97. Mais, 77+20-7=90, ce que vous voulez. Et 7 est la différence entre 77 et 70, le nombre valide précédent. Vous pouvez obtenir la différence avec (nombre-10)%20. Cependant, cela ne fonctionne pas si le nombre est correct au départ, d'où la logique à la fin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X