2014-09-04 85 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];