2015-05-05 56 views
-1

當使用Float32Array值時,我注意到了一些不太好的angularjs行爲。使用Float32Array進行angularjs的奇怪行爲

基本上我測試了這三個

angular.module("myApp", []).controller("myCtrl", function($scope) { 
    $scope.n = 0.2; // Displays as 0.2 
    $scope.arr1 = new Float32Array(1); 
    $scope.arr1[0] = 0.2; // 0,20000000298023224 
    $scope.arr2 = new Float64Array(1); 
    $scope.arr2[0] = 0.2; // Displays as 0.2 
}); 

我明白與0.2是週期性作爲二進制小數的問題。

但是,您是否有任何想法如何告訴toString方法(或其他函數)考慮到較低的精度並在適當時舍入小數?

這是我加入,使其更好一點(但仍不太)指令:

.directive("numberfloat", function(){ 
    return { 
    scope: {n: "=model"}, 
    template: '<input type="number" ng-model="m" ng-model-options="{getterSetter: true}"/>', 
    link: function($scope){ 
     $scope.m = function(newVal){ 
     if(newVal){ 
      $scope.n = newVal; 
     } 
     return parseFloat($scope.n.toFixed(4)); 
     } 
    } 
    } 
}) 

http://plnkr.co/edit/WqOwIHDF0iOS9YGe0mKj?p=preview

+0

好,真正討厭的事情是,在進入某些東西時,甚至Float64Array行爲不同到底 - 這就是比如它是不可能有它僅包含一個減號。 :( –

回答

0

可以使用number filter固定顯示的數字的精度模板本身,即在視圖層本身。

例如{{arr1[0] | number:2 }}會將精度修正爲2位小數。

演示:http://plnkr.co/edit/0pH9XAYlwoPTSDxjKTZ8?p=preview

+0

謝謝,但這是某種明顯的部分 - 棘手的部分是另一種方式,它使輸入變得不可能。我在(現在更新的plunker)中提出瞭解決方案,但偶爾它仍然呈現由於一些很大的編號根本無法編輯,因此無法使用 我可能會做內部存儲64位數字的麻煩,只需將它轉換爲32位數就可以了。 –