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?

1voto

KevinBui Points 351

Nouvelle réponse pour une ancienne question, sans if ni Math

x % 5: le reste
5 - x % 5: la quantité à ajouter
(5 - x % 5) % 5: s'assurer qu'il est inférieur à 5
x + (5 - x % 5) % 5: le résultat (x ou le prochain multiple de 5)

~~((x + N - 1) / N): équivalent à Math.ceil(x / N)

function round5(x) {
 return x + (5 - x % 5) % 5;
}

function nearest_multiple_of(N, x) {
 return x + (N - x % N) % N;
}

function other_way_nearest_multiple_of(N, x) {
 return ~~((x + N - 1) / N) * N;
}

console.info(nearest_multiple_of(5,    0)); // 0
console.info(nearest_multiple_of(5, 2022)); // 2025
console.info(nearest_multiple_of(5, 2025)); // 2025

console.info(other_way_nearest_multiple_of(5, 2022)); // 2025
console.info(other_way_nearest_multiple_of(5, 2025)); // 2025

-1voto

Dennis T Points 11

// arrondi avec précision

var round = function (value, precision) {
    return Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
};

// arrondi à 5 avec précision

var round5 = (value, precision) => {
    return round(value * 2, precision) / 2;
}

-1voto

Parit Points 54
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

la raison d'utiliser round est que l'entrée attendue peut être un nombre aléatoire.

Merci !!!

-1voto

briankip Points 162

J'ai résolu cela en utilisant une boucle while, ou toute autre boucle d'ailleurs. Ce qui importe est d'augmenter le nombre disons n, jusqu'à ce que n % 5 == 0; Quelque chose comme ça

while(n % 5 != 0) {
    n++;
}
return n;

-3voto

MyFantasy512 Points 310
if( x % 5 == 0 ) {
    return int( Math.floor( x / 5 ) ) * 5;
} else {
    return ( int( Math.floor( x / 5 ) ) * 5 ) + 5;
}

peut-être?

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