2016-08-26 52 views
2

我有下面的input字段和一个ng-change函数,当数字以零开始时触发失败。输入类型编号失败为零

<input type="number" ng-model="num" ng-change="confirm(num, 9)" /> 

function confirm = function(value, length) { 
    if (!value) return false; 
    $scope.val = ("" + value).length !== length; 
}; 

当我进入失败"011111111"

+0

这是因为十进制数*不能以0开始。您输入的是0,但实际值被设置为“11111111”。 –

+0

解析数字,然后尝试 – manish

+0

当JS中的数字具有前导0时,我们认为它们是八进制数,而不是十进制数。如果你想要这个比较,请使用一个字符串。打开你的控制台,输入'011111111',你将得到'2396745',结果 –

回答

2

从数学上讲下面的数字,数字不能有前导零。在JS,上一个整数把领先的0是相当于解析八进制或基地8

var num = 011111111; 
//is the same as 
parseInt(011111111, 8); 
//equals 2396745 

当在现实中你想要一个小数解析,这是基地10为了使您的前导零,你”必须确保输入是一个字符串,或者将其删除,然后执行自己的解析,以便在检测到的情况下将其添加到该字符串中。

+0

我应该使用parseInt(num,10)还是base 8 – Shane

+0

,你需要哪一个? ... –

+0

您无法使用前导0解析数字。'parseInt(num,10)'仍然会将八进制数解析为十进制数,但不会更改任何内容。你需要字符串操作。 –