AngularJS数字过滤器fractionSize限制为20位小数
为什么AngularJS中的数字过滤器fractionSize限制为20位小数AngularJS数字过滤器fractionSize限制为20位小数,angularjs,angularjs-filter,Angularjs,Angularjs Filter,为什么AngularJS中的数字过滤器fractionSize限制为20位小数 Distance1<span ng-model='distance'>{{distance| number:20}}</span> <br /> span{ 填充:3倍; 利润率:12像素; 背景:黄色; } 距离1{{distance | number:20}} 距离2{{distance | number:21}} 原始猜测 虽然我无法在数字过滤器中找到一个引用,但我猜它在
Distance1<span ng-model='distance'>{{distance| number:20}}</span> <br />
span{
填充:3倍;
利润率:12像素;
背景:黄色;
}
距离1{{distance | number:20}}
距离2{{distance | number:21}}
原始猜测
虽然我无法在数字过滤器中找到一个引用,但我猜它在更深的某个地方使用了Number.toFixed
,它被限制为20个十进制空间。根据:
小数点后显示的位数;这可能是一个介于0和20之间(包括0和20)的值,并且实现可以选择支持更大范围的值。如果省略此参数,则将其视为0
更好的猜测
我做了一些测试,我认为这是Number.prototype.toFixed
的限制的组合,最大长度为20,加上过滤器中存在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字符串。基本上是它的20位小数。您可以通过将$scope.distance
更改为1
来检查它。
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