我正在构建一个涉及大量的角度应用程序。我想缩短它们的显示方式,所以我建立了一个快速而肮脏的过滤器,取代了#100; 1000000000'通过&#; $ 1.0Bn'例如,但它真的很脏,它只是截断数字而不是将它们四舍五入。
这是:
.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;
}
});
他们的任何预制过滤器是否有角度来完成这项工作?或者我怎样才能大大缩短它?
答案 0 :(得分:2)
您可以使用数学对数log计算一些内容!这将帮助您了解输入的位数。
示例(log为10对数,ln为napierian对数):
log(12345678910) = ln(12345678910)/ln(10) = 10
此处,10是第一个' 1'之后的位数。
根据此信息,您可以计算简化值,然后使用toFixed将其四舍五入! (这适用于IE5.5 +,Javascript 1.5,我假设你在使用AngularJS时得到它)
以下完整示例:
var number = 12345678910;
var digits = 2;
var suffix = ["", "K.", "M.", "B."];
var nbDigits = Math.round(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];