2014-09-04 3 views
0

Je construis une application angulaire impliquant de grandes quantités. Je voudrais raccourcir la façon dont ils sont affichés donc j'ai construit un filtre rapide et sale en remplaçant '1000000000' par '$ 1.0Bn' par exemple mais il est vraiment sale et il suffit de tronquer les nombres au lieu de les arrondir.filtre de devises pour une grande quantité en angulaire

Ici, il est:

.filter('largeAmountCurrency', function() { 
    return function(input) { 
     if (!input) return; 

     var oneBillion = 1000000000, 
      oneMillion = 1000000; 

     if (input > oneBillion) 
     return '$' + parseInt(input/oneBillion) + '.' + 
       String(parseInt(input - parseInt(input/oneBillion))).substring(1,3) + 'Bn'; 

     if (input > oneMillion) 
     return '$' + parseInt(input/oneMillion) + '.' + 
       String(parseInt(input - parseInt(input/oneMillion))).substring(1,3) + 'M'; 

     return input; 
    } 
    }); 

est leur tout filtre préconstruits dans angulaire qui fait ce travail? Ou comment puis-je le raccourcir de façon spectaculaire?

Répondre

2

Vous pouvez calculer quelques choses en utilisant le logarithme mathématique log! Cela vous aidera à connaître le nombre de chiffres que votre entrée a. Sur la base de ces informations, vous pouvez calculer une valeur simplifiée, puis arrondir avec toFixed! (Cela fonctionne avec IE5.5 +, Javascript 1.5, je vous l'obtenez supposais lorsque vous utilisez AngularJS)

Un exemple complet ci-dessous:

var number = 12345678910; 

var digits = 2; 
var suffix = ["", "K.", "M.", "B."]; 

var nbDigits = parseInt(Math.log(number)/Math.LN10); 
var power = nbDigits - nbDigits%3; 

var tmp = number/ Math.pow(10, power); 
var suffixIndex = Math.min(3, power/3); 

var result = "$" + tmp.toFixed(digits) + " " + suffix[suffixIndex]; 
Questions connexes