2016-01-12 86 views
0

當在較大的數字使用數字濾波器,角被倒圓它們: 例如:值設定爲9999999999999.999並將其四捨五入到9999999999999.998如何避免在AngularJS自動小數四捨五入過濾

<body ng-app="numberFilterExample"> 
    <script> 
    angular.module('numberFilterExample', []) 
    .controller('ExampleController', ['$scope', function($scope) { 
     $scope.val = 9999999999999.999; 
    }]); 
</script> 
<div ng-controller="ExampleController"> 
    <label>Enter number: <input ng-model='val'></label><br> 
    Default formatting: <span id='number-default'>{{val | number}}</span><br> 
    No fractions: <span>{{val | number:0}}</span><br> 
    Negative number: <span>{{-val | number:4}}</span> 
</div> 
</body> 
</html> 

plunker

有沒有辦法避免這種行爲?

+1

它實際上並不是四捨五入的,而是JavaScript本身。只需在您的瀏覽器開發控制檯中粘貼9999999999999.999,它將返回9999999999999.998。這可能是因爲大數的浮點表示無法準確表示它。也許你可能想使用一些大型圖書館 –

+0

https://github.com/MikeMcl/bignumber.js/ –

+0

@JosephYoung,請提供您的信息作爲答案。 – isherwood

回答

1

它實際上並不是四捨五入的,而是JavaScript本身。只需在您的瀏覽器開發控制檯中粘貼9999999999999.999,它將返回9999999999999.998。

這可能是因爲大數的浮點表示無法準確地表示它。

也許你會想用一些大量的庫如big number (from Ben Harolds comment)

0

JavaScript使用64位浮點數,可惜最近數9999999999999.999它可以表示爲9999999999999.998046875,這就是爲什麼你看到你所看到的。

我從周圍的代碼推斷,你可能更好的代表這個特定的數字作爲一個字符串。你將得到一個確切的表示,而不需要帶入任何圖書館。

+0

「use strict」; var s = 99999999999999939984; console.log(s); //顯示99999999999999930000 ..是否有任何方法我們可以得到一個異常至少 –

+0

似乎沒有任何與浮點數解析精度相關的異常。 –