Angularjs仅输入两个小数或数字的ng-model

时间:2015-06-10 11:06:39

标签: javascript angularjs

我有一个在控制器中声明的默认值并传递了' val:1.81'通过ng-model。此类输入必须为数字(类型:数字)。通过角度过滤器,设法通过过滤器编号2'在下一行上仅打印两个小数位。另外,我需要添加几个按钮来添加或减去' 0.01'比如计数器值输入。

有没有办法过滤输入也只有两位小数?我之所以提到这一点是因为当我通过点击按钮求和时,输入打印就会出现例如1.8800000000000001'。

Original JS Bin



var app = angular.module('myApp', []);

app.controller("mainCtrl", function($scope)
{
  $scope.val = 1.80;
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<div ng-app="myApp" ng-controller="mainCtrl">
  <br/><br/>
  <div>
    <span style="color: red">Val input:</span>
  <input type="number" ng-model="val"/>
  <button ng-click="val = val - 0.01">-0.01</button>
  <button ng-click="val = val + 0.01">+0.01</button>
  </div>
  <div>Val: {{val | number:2}}</div>
  
  <hr>
  
  Val2 (val + 20): {{ val2 = val + 20 | number:2 }}
  
  <hr>
  
  Val2 input:
  <input type="number" ng-model="val2"/>
  
</div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

有关浮点数的小数精度的参考,请参阅https://stackoverflow.com/a/4640423

对于你的特定例子,这样的事情应该足够了:

$scope.increment = function(increment) {
    $scope.val = parseFloat(($scope.val + increment).toFixed(2));
};

同样,您也可以使用.toPrecision(3)代替。

编辑:我看到你也问过如何将用户输入过滤到2个十进制的情况。对于这种情况,最好的选择是观察值的变化并相应地围绕@alesc建议。

EDIT2:我建议您将控制器中的逻辑留作良好的做法:

<button ng-click="increment(-0.01)">-0.01</button>
<button ng-click="increment(0.01)">0.01</button>

然后调用html:

@font-face {
    font-family: 'Yekan';
    src: url('font/Yekan.eot');
    src: url('Font/Yekan.woff');
    src: url('Font/Yekan.eot?#iefix') format('embedded-opentype'), url('font/Yekan.ttf'),  url('font/Yekan.svg');
    font-weight: bold;
}

答案 1 :(得分:0)

一个(IMO脏)解决方案是监视$scope.val的变化,并将数字四舍五入到发生的位数。

您只需按如下方式修改控制器:

app.controller("mainCtrl", function($scope)
{
    $scope.val = 1.80;
    $scope.$watch(
      function(scope) { 
        return scope.val; 
      },
      function(num) {
        $scope.val = Math.round(num * 100) / 100;
      }
  );
});

这样,每当发生更改时,都会使用2位舍入值覆盖该值。不需要更改其他HTML和/或模板。

JS Bin示例:http://jsbin.com/viyixofova/1/(只有第一个输入实现了舍入)。

答案 2 :(得分:-1)

好的感谢您的帮助,最后我使用了这个:http://jsbin.com/gijejo/9/edit

最后一个问题,有没有办法统一输入ng-model的任何值的递增和递减函数,而不是按值重复parseFloat?

再次感谢