185 votes

Javascript: Arrondir au multiple de 5 suivant

J'ai besoin d'une fonction utilitaire qui prend en paramètre une valeur entière (allant de 2 à 5 chiffres de longueur) qui arrondit vers le haut au multiple de 5 suivant au lieu du multiple de 5 le plus proche. Voici ce que j'ai :

function round5(x)
{
    return (x % 5) >= 2.5 ? parseInt(x / 5) * 5 + 5 : parseInt(x / 5) * 5;
}

Lorsque j'exécute round5(32), cela me donne 30, alors que je veux 35.
Lorsque j'exécute round5(37), cela me donne 35, alors que je veux 40.

Lorsque j'exécute round5(132), cela me donne 130, alors que je veux 135.
Lorsque j'exécute round5(137), cela me donne 135, alors que je veux 140.

etc...

Comment puis-je faire cela?

413voto

pawel Points 7016

Cela fera l'affaire:

function round5(x)
{
    return Math.ceil(x / 5) * 5;
}

C'est juste une variation de la fonction courante d'arrondi number au multiple le plus proche de x Math.round(number/x)*x, mais en utilisant .ceil au lieu de .round cela permet d'arrondir toujours vers le haut au lieu d'en bas/en haut selon les règles mathématiques.

40voto

const arrondiAuPlusProcheDe5 = x => Math.round(x / 5) * 5

Cela arrondira le nombre au plus proche de 5. Pour toujours arrondir vers le haut au plus proche de 5, utilisez Math.ceil. De même, pour toujours arrondir vers le bas, utilisez Math.floor au lieu de Math.round. Vous pouvez ensuite appeler cette fonction comme vous le feriez pour toute autre. Par exemple,

arrondiAuPlusProcheDe5(21)

résultera en :

20

9voto

Comme ça ?

fonction arrondi5(x) { return (x%5)?x-x%5+5:x }

4voto

AymKdn Points 868

Je suis arrivé ici en cherchant quelque chose de similaire. Si mon numéro est -0, -1, -2 il devrait plancher à -0, et s'il est -3, -4, -5 il devrait arrondir à -5.

Je suis arrivé à cette solution:

function round(x) { return x % 5 < 3 ? (x % 5 === 0 ? x : Math.floor(x / 5) * 5) : Math.ceil(x / 5) * 5 }

Et les tests:

for (var x = 40; x < 51; x++) {
  console.log(x+"=>", x % 5 < 3 ? (x % 5 === 0 ? x : Math.floor(x / 5) * 5) : Math.ceil(x / 5) * 5)
}
// 40 => 40
// 41 => 40
// 42 => 40
// 43 => 45
// 44 => 45
// 45 => 45
// 46 => 45
// 47 => 45
// 48 => 50
// 49 => 50
// 50 => 50

3voto

Paul Neulat Points 31
voici 2 solutions possibles :
y= (x % 10==0) ? x : x-x%5 +5; //......... 15 => 20 ; 37 => 40 ;  41 => 45 ; 20 => 20 ; 

z= (x % 5==0) ? x : x-x%5 +5; //......... 15 => 15 ; 37 => 40 ;  41 => 45 ; 20 => 20 ;

Regards Paul

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