我需要为我的应用打印非常小的数字。如果它们都以十进制格式显示,我更喜欢。有没有办法用angularjs数字过滤器做这个或者我必须自己编写或以某种方式修改现有的?
http://jsfiddle.net/ADukg/2386/
的Javascript
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.MyNum1 = 0.000001;
$scope.MyNum2 = 0.0000001;
}
HTML
<div ng-controller="MyCtrl">
Small Number: {{MyNum1 | number:8}}<br/>
Very Small Number: {{MyNum2 | number:8}}
</div>
输出不一致
Small Number: 0.00000100
Very Small Number: 1e-7
答案 0 :(得分:4)
我还没有完全测试过这个,我不知道如何让这个工作在jsfiddle,但这似乎暂时有效。
的Javascript
var app = angular.module('myApp', []);
app.filter('decimalFormat', function () {
return function (text) {
return parseFloat(text).toFixed(20).replace(/0+$/,'');
};
});
HTML
<div ng-controller="MyCtrl">
Small Number: {{MyNum1 | number:8 | decimalFormat}}<br/>
Very Small Number: {{MyNum2 | number:8 | decimalFormat}}
</div>
在兰登发表评论后编辑,加上逗号:
的Javascript
var app = angular.module('myApp', []);
app.filter('decimal', function () {
return function (text) {
var parts = parseFloat(text).toFixed(8).split('.');
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return parts.join('.');
}
};
});
function MyCtrl($scope) {
$scope.MyNum1 = 0.12345678912;
$scope.MyNum2 = 0.000000100001;
$scope.MyNum3 = 0;
$scope.MyNum3 = 1123123.05;
}
HTML
<div ng-controller="MyCtrl">
Small Number: {{MyNum1 | decimal}}<br/>
Very Small Number: {{MyNum2 | decimal}}<br/>
Zero: {{MyNum3 | decimal}}<br/>
Million: {{MyNum4 | decimal}}<br/>
</div>
答案 1 :(得分:3)
由于源中的现有过滤器不能处理大的小数位数,因此您必须自己编写(请参阅filters.js中的formatNumber
)。最终问题是调用toString
来显示HTML中的数字。理想情况下,可以调用toFixed
,但这很棘手,因为你必须弄清楚小数的长度。
console.log(0.000001);
> 0.000001
console.log(0.0000001);
> 1e-7
console.log(0.0000001.toFixed(20));
> 0.00000010000000000000
这是一个快速黑客:
console.log(0.0000001.toFixed(20).replace(/0+$/, ''));
> 0.0000001
所以你的自定义过滤器可以这么简单。我建议在GitHub上提交一个问题。
答案 2 :(得分:1)
这是为了将大数字作为十进制字符串返回,但它也适用于小字符串 -
Number.prototype.noExponents= function(){
var data= String(this).split(/[eE]/);
if(data.length== 1) return data[0];
var z= '', sign= this<0? '-':'',
str= data[0].replace('.', ''),
mag= Number(data[1])+ 1;
if(mag<0){
z= sign + '0.';
while(mag++) z += '0';
return z + str.replace(/^\-/,'');
}
mag -= str.length;
while(mag--) z += '0';
return str + z;
}
var n=1e-7;
n.noExponents();
returned value: (String) '0.0000001';