我有一个在控制器中声明的默认值并传递了' val:1.81'通过ng-model。此类输入必须为数字(类型:数字)。通过角度过滤器,设法通过过滤器编号2'在下一行上仅打印两个小数位。另外,我需要添加几个按钮来添加或减去' 0.01'比如计数器值输入。
有没有办法过滤输入也只有两位小数?我之所以提到这一点是因为当我通过点击按钮求和时,输入打印就会出现例如1.8800000000000001'。
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;
答案 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?
再次感谢