AngularJS数字过滤器fractionSize限制为20个小数位

时间:2016-04-01 12:50:07

标签: angularjs angularjs-filter

为什么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>

1 个答案:

答案 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字符串。