使用Float32Arrays的angularjs的奇怪行为

时间:2015-05-05 14:18:51

标签: javascript angularjs typed-arrays

我注意到在使用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

1 个答案:

答案 0 :(得分:0)

您可以使用number filter来修复模板本身中显示数字的精度,即在视图图层中。

e.g。 {{arr1[0] | number:2 }}会将精度固定在2位小数位。

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