【发布时间】:2017-11-13 17:19:39
【问题描述】:
我在表单中有一个数字输入字段。我已经将最大小数位数设置为2,最大值设置为99999999999999
如果我尝试提交99999999999999999 的值,它会检测到它太大并且不允许它。
如果我尝试提交99.123,它会检测到它的小数位数过多并且不允许。
但如果我尝试提交99999999999996.123,它不会检测到它的小数位数太多。
我该如何解决这个问题?
var app = angular.module('Appp', []);
app.controller('metadataCtrl', function ($scope, $http) {
$scope.vm = { myItems : {} }
$scope.item = {type: "a", value: 99999999999998};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form ng-app="Appp" name="myForm" ng-controller="metadataCtrl">
<input type="number"
step="0.01"
max="99999999999999"
min="0"
step-message="{name} can only have a maximum of 2 decimal places"
ng-model="item.value"/>
<input type="submit" value="Submit">
</form>
【问题讨论】:
-
只要执行
console.log(99999999999996.123),你就会明白原因了。一个数字只有 64 位。您不能仅在 64 位中存储无限的实数。数字越大,精确度就越低。