2014-09-04 194 views
0

我正在構建一個涉及大量角度的應用程序。我想縮短他們的顯示方式,所以我構建了一個快速而髒的過濾器,用'$ 1.0Bn'代替'1000000000',但它確實很髒,它只是截斷了數字而不是四捨五入。角度較大的貨幣過濾器

這就是:

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

是他們在任何角度預置的過濾器,做這件工作?或者我怎樣才能大大縮短它?

回答

2

你可以用數學對數log來計算一些東西!這將幫助您瞭解您輸入的數字數量。

根據這些信息,您可以計算一個簡化的值,然後用toFixed四捨五入! (這適用於IE5.5 +,使用Javascript 1.5,我以爲你得到它,當你使用AngularJS)

下面一個完整的例子:

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]; 
相關問題