0
votes

Tour à un nombre spécifique

Je recherche une méthode JS standard qui fait essentiellement que: xxx

comme décrit dans le titre que je veux que ma valeur soit arrondi sur des numéros spécifiques, à savoir 1M, 2M et 5 M.


2 commentaires

Il n'y a pas de moyen standard de le faire. Vous écrivez-vous vous-même ou utilisez une bibliothèque.


Vous pouvez facilement l'arrondir à des millions, mais vous ne pouvez pas sauter les autres valeurs, comme 0, 3, 4, 6 etc.


3 Réponses :


0
votes

Pas totalement sûr si c'est ce que vous voulez, mais voici ma suggestion:

const temp = Math.abs(myValue / 1000000) * 1000000;


0 commentaires

0
votes

ici, le code que vous voulez.

p>

function formatMoney(n, c, d, t) {
  var c = isNaN(c = Math.abs(c)) ? 2 : c,
    d = d == undefined ? "." : d,
    t = t == undefined ? "," : t,
    s = n < 0 ? "-" : "",
    i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
    j = (j = i.length) > 3 ? j % 3 : 0;

  return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

function numShort(value){
    if(value < 1000000){
      return formatMoney(value, 2, ".", ",");
    }else if(value < 1000000000){
      return formatMoney((value/1000000), 2, ".", ",")+'m';
    }else{
      return formatMoney((value/1000000000), 2, ".", ",")+'b';
    }
}

console.log(numShort(100));
console.log(numShort(1000));
console.log(numShort(10000));
console.log(numShort(100000));
console.log(numShort(1000000));
console.log(numShort(10000000));
console.log(numShort(100000000));
console.log(numShort(1000000000));
console.log(numShort(10000000000));
console.log(numShort(100000000000));


0 commentaires

1
votes

Certainement, vous devez mettre en œuvre une telle chose spéciale vous-même. Si vous voulez juste une solution fantaisie d'une ligne de fantaisie pour que votre code nettoyeur de code:

p>

var myValue = 1234567;
var rounded = [1000000,2000000,5000000].reduce((y,x)=>{return y.diff == undefined || Math.abs(x-myValue) < y.diff ? {val:x,diff:Math.abs(x-myValue)} : y},{}).val;
console.log(rounded);


1 commentaires

Merci, j'espérais déjà qu'il y avait déjà une solution pour cela ... mais je pense que je vais passer sur la doublure, je pense que la solution de ligne multiple est plus facile à lire et je n'ai pas vraiment besoin de vous inquiéter de la performance