使用toFixed处理AngularJS number输入框的数值赋值问题
解决Number输入框无法绑定字符串类型金额的问题
嘿,我完全懂你碰到的这个坑!toFixed()确实会返回字符串,而number类型的输入框只认数字值,下面给你几个实用的解决方案:
方案1:转换为数字类型再处理(推荐)
先把字符串格式的金额转成浮点数字,处理完小数位后再转回数字类型,这样输入框就能正确识别了:
// 用+运算符把toFixed返回的字符串转回数字 $scope.amount = +parseFloat($scope.amount).toFixed(2); // 或者用Number()方法,效果一样 $scope.amount = Number(parseFloat($scope.amount).toFixed(2));
注意这里用parseFloat而不是parseInt,因为parseInt会直接砍掉小数部分,比如"15.67"会被转成15,而parseFloat能保留原有的小数信息。
方案2:用数学运算直接得到数字类型的两位小数
如果不想用toFixed(),可以通过乘法+四舍五入+除法的方式直接得到数字类型的结果:
$scope.amount = Math.round(parseFloat($scope.amount) * 100) / 100;
这个方法的原理是:先把数字放大100倍,四舍五入取整,再缩小100倍,最终得到的就是保留两位小数的数字值,完全不需要处理字符串转换的问题。
方案3:处理边界情况(可选)
如果用户可能输入空值或者非数字内容,可以加个判断避免出现NaN:
const inputNum = parseFloat($scope.amount); // 如果转换失败,默认设为0.00(数字类型) $scope.amount = isNaN(inputNum) ? 0.00 : +inputNum.toFixed(2);
这样处理后,$scope.amount就会是标准的数字类型,完美适配number输入框的绑定要求啦!
内容的提问来源于stack exchange,提问作者J.Do
相关产品推荐
相关产品推荐

