为什么AngularJS中的数字过滤器fractionSize限制为20个小数位?
Distance1<span ng-model='distance'>{{distance| number:20}}</span> <br />
输出
1.00000000000000000000
但是
Distance2<span ng-model='distance'>{{distance| number:21}}</span> <br />
输出
NaN.000000000000000000000
var app = angular.module('myModule', []);
app.controller('myController', ['$scope', function($scope) {
$scope.distance = 1;
}]);
span {
padding: 3px;
margin: 12px;
background: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='myModule' ng-controller='myController'>
Distance1<span ng-model='distance'>{{distance| number:20}}</span> <br />
Distance2<span ng-model='distance'>{{distance| number:21}}</span> <br />
</div>
答案 0 :(得分:2)
虽然我无法在号码过滤器source中找到引用,但我猜测它正在使用Number.toFixed
,它仅限于20个十进制空格。根据{{3}}:
小数点后出现的位数;这可以是0到20之间的值,包括0和20,并且实现可以可选地支持更大范围的值。如果省略此参数,则将其视为0
我做了一些测试,我认为它是Number.prototype.toFixed
的最大长度为20的限制的组合加上过滤器MDN documentation中的source的事实。 var MAX_DIGITS = 22
。我运行了以下测试来检查我的理论:
var $number = angular.injector().get('numberFilter')
$number(1, 20) // 1.00000000000000000000, 22 total chars
$number(1, 21) // NaN.000000000000000000000, 23 total chars (assuming if NaN evaluated to a single char)
$number(10, 20) // NaN.00000000000000000000
$number(10, 19) // 10.0000000000000000000
你可以看到,22并没有提到实际的数值,它似乎是指字符串的长度。还不清楚如何处理$number(0, 21)
而不输出NaN字符串。