Javascript Angularjs输入ng模型仅含两位小数或数字

Javascript Angularjs输入ng模型仅含两位小数或数字,javascript,angularjs,Javascript,Angularjs,我有一个在控制器中声明了默认值并由ng模型传递“val:1.81”的。此类输入必须是数字(类型:number)。通过角度过滤器,通过过滤器“数字2”在下一行仅打印两位小数。此外,我需要包括两个按钮来添加或减去“0.01”,就像计数器值输入一样 有没有办法用两个小数来过滤输入?我之所以提到这一点,是因为当我通过单击按钮求和时,会出现一个输入打印时间,例如“1.880000000000001” var-app=angular.module('myApp',[]); 应用程序控制器(“mainCt

我有一个在控制器中声明了默认值并由ng模型传递“val:1.81”的。此类输入必须是数字(类型:number)。通过角度过滤器,通过过滤器“数字2”在下一行仅打印两位小数。此外,我需要包括两个按钮来添加或减去“0.01”,就像计数器值输入一样

有没有办法用两个小数来过滤输入?我之所以提到这一点,是因为当我通过单击按钮求和时,会出现一个输入打印时间,例如“1.880000000000001”

var-app=angular.module('myApp',[]);
应用程序控制器(“mainCtrl”,函数($scope)
{
$scope.val=1.80;
});



Val输入: -0.01 +0.01 Val:{{Val |编号:2}}
Val2(val+20):{{Val2=val+20 |编号:2}}
Val2输入:
有关浮点小数精度的参考,请参阅

对于您的特定示例,类似这样的内容就足够了:

$scope.val = parseFloat(($scope.val - 0.01).toFixed(2));
类似地,也可以使用.toPrecision(3)

编辑:我看到您还询问了如何将用户输入过滤为2个十进制大小写。在这种情况下,最好的选择是观察值的变化,并按照@alesc的建议进行相应的取整

EDIT2:我建议您将逻辑留在控制器中作为良好实践:

$scope.increment = function(increment) {
    $scope.val = parseFloat(($scope.val + increment).toFixed(2));
};
然后调用html:

<button ng-click="increment(-0.01)">-0.01</button>
<button ng-click="increment(0.01)">0.01</button>
-0.01
0.01
一个(IMO dirty)解决方案是监视
$scope.val上的更改,并将数字四舍五入为2位数字

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

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;
      }
  );
});
这样,无论何时发生更改,都可以使用两位数的舍入值覆盖该值。不需要其他HTML和/或模板更改


JS Bin示例:(只有第一个输入实现了舍入)。

好的,谢谢你的帮助,最后我使用这个:

最后一个问题,有没有一种方法可以通过不重复parseFloat by value来统一输入ng模型的任何值的递增和递减函数


再次感谢

谢谢!它很脏但很有用:)你好,谢谢你的介绍,我理解你的介绍,但我正在尝试应用你的例子,不使用按钮添加或减去我。我写错了什么?奇怪的是,它不起作用,但检查编辑以获得更干净的解决方法:)编辑答案以删除错误的代码段。请参阅以了解parseFloat在作用域上不可用的原因。