web-dev-qa-db-fra.com

Javascript: arrondissez au 5 le plus proche, puis trouvez un dénominateur commun

je cherche un moyen d'arrondir ET de descendre jusqu'au cinquième rang, puis de trouver un grand dénominateur commun aux deux nombres. J'en ai besoin pour la légende d'une y-skale sur un graphique.

Ceci est mon code jusqu'à présent:

function toN5( x ) {
    var i = 1;
    while( x >= 100 ) {
        x/=10; 
        i*=10;
    }
    var remainder = x % 5;
    var distance_to_5 = (5 - remainder) % 5;
    return (x + distance_to_5) * i;
}

La cible ressemble à ceci: La valeur maximale (arrondir au 5 le plus proche)

1379.8 -> 1500

Et inversement - valeur minimale (arrondir au 5 le plus proche)

41.8 -> 0

Ensuite, je veux trouver un dénominateur commun comme 250 ou 500

0 -> 250 -> 500 -> 750 -> 1000 -> 1250 -> 1500

ou:

0 -> 500 -> 1000 -> 1500

Y at-il un moyen de faire quelque chose comme ça? Merci beaucoup 

18
Fargho

Si vous voulez arrondir x à 500 près, vous pouvez le diviser par 500, le arrondir à l'entier le plus proche, puis le multiplier par 500:

x_rounded = 500 * Math.round(x/500);

Pour l’arrondir au y le plus proche, remplacez 500 par y :

x_rounded = 250 * Math.round(x/250);
50
Blazemonger

J'espère que mes calculs sont corrects, mais voici différentes façons de "contourner"

function sigfig(n, sf) {
    sf = sf - Math.floor(Math.log(n) / Math.LN10) - 1;
    sf = Math.pow(10, sf);
    n = Math.round(n * sf);
    n = n / sf;
    return n;
}

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

function nearest(n, v) {
    n = n / v;
    n = Math.round(n) * v;
    return n;
}

démo

5
T I

En utilisant this api , vous pouvez arrondir n’importe quel nombre au plus proche multiple de tout nombre, haut ou bas, avec cette commande:

$scm.round(number to be rounded).toNearest(multiple to which you want to round);

Par exemple, si vous voulez arrondir 536 au 500 le plus proche, utilisez:

$scm.round(536).toNearest(500);

1
J. Smith