2014-09-20 50 views
2

有没有办法防止浮点值在作为输入值[type = number]时被四舍五入。按照要求我不能使用任何其他类型。防止输入[type = number]自动舍入浮点值

例如,我无法将输入[type = number]与值“3.00”绑定,它会自动舍入为“3”。

我想使用angularjs绑定值。

angular.module('app', []) 
.controller('controller1', ['$scope', function ($scope){ 
    $scope.value=3.00; 
}]); 

<div ng-app="app" ng-controller="controller1"> 
    <input type="number" ng-model="value" /><br/> 
    {{value}}<br/> 
</div> 

这是链接到PEN:http://codepen.io/cyrilpanicker/pen/aqucJ?editors=101

+0

使它成为一个字符串,然后解析字符串,如果你需要在其上进行计算。 – bowheart 2014-09-20 22:33:19

+0

你的意思是删除type =“number”属性?不能这样做coz type =“number”是一个要求.. – Cyril 2014-09-20 22:34:36

+0

对不起,这可能是非常不可取的。但是,是的,你必须取消'type =“number”'...除非你带入了大量的jquery .. – bowheart 2014-09-20 22:39:52

回答

0

可以使用number过滤器来格式化数字时,你显示它。 {{value |编号:2}}将始终用2dp显示它:

<div ng-app="app" ng-controller="controller1"> 
    <input type="number" ng-model="value" /><br/> 
    {{value | number:2}}<br/> 
</div> 
+0

OP希望输入值的格式不在显示器上。 – PSL 2014-09-20 23:35:24

1

这是因为ngModel在解析后四舍五入值。一种解决方法可能是使用低优先级的自定义指令(-1)而不是ngModel(它在优先级0上运行)处理它,以便它在ngModel解析后运行。并在指令中注册一个格式化程序,它将使用数字过滤器来重新格式化输入的模型值。

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

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.value=3.00; 
 
}).directive('formatNum', function(numberFilter){ 
 
    return { 
 
    priority:-1, //<-- Important 
 
    require:'ngModel', 
 
    link:function(scope, elm, attrs, ngModel){ 
 
     ngModel.$formatters.push(format); //Push a formatter 
 
     function format(){ 
 
      return numberFilter(ngModel.$modelValue , 2); //Round off to 2 dec 
 
     } 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller= "MainCtrl"> 
 
<input type="number" ng-model="value" format-num/><br/> 
 
    {{value | number:2}}<br/> 
 
</div>

+0

如果你真的想让可编辑字段有那么简单的'.00',请使用它。可能它根本不值得这样做,因为只读域可以使用数字过滤器。 – PSL 2014-09-20 23:22:40