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
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);
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;
}
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);