检查一个数字是否有小数位/是一个整数

我在JavaScript中寻找一个简单的方法来检查一个数字是否有一个小数位(为了确定它是否是一个整数)。 例如,

23 -> OK 5 -> OK 3.5 -> not OK 34.345 -> not OK 
 if(number is integer) {...} 

使用模数将起作用:

 num % 1 != 0 // 23 % 1 = 0 // 23.5 % 1 = 0.5 

请注意,这是基于数字的数值,而不pipe格式。 它将包含整数的数字string与固定的小数点整数相同:

 '10.0' % 1; // returns 0 10 % 1; // returns 0 '10.5' % 1; // returns 0.5 10.5 % 1; // returns 0.5 

或者你可以用它来找出它是不是十进制的:

 string.indexOf(".")==-1; 

//如何字节呢?

 Number.prototype.isInt= function(){ return this== this>> 0; } 

我总是觉得有点不好的位运算符在javascript-

他们几乎没有任何锻炼。

最常见的解决方法是去除数字的整数部分,并将其比较为零,如下所示:

 function Test() { var startVal = 123.456 alert( (startVal - Math.floor(startVal)) != 0 ) } 

简单,但有效!

 Math.floor(number) == number; 
 Number.isInteger(23); // true Number.isInteger(1.5); // false Number.isInteger("x"); // false: 

Number.isInteger()是ES6标准的一部分,在IE11中不受支持。

它对NaNInfinity和非数字参数返回false,而x % 1 != 0返回true。

 var re=/^-?[0-9]+$/; var num=10; re.test(num); 
 function isDecimal(n){ if(n == "") return false; var strCheck = "0123456789"; var i; for(i in n){ if(strCheck.indexOf(n[i]) == -1) return false; } return true; } 
 number = 20.5 if (number == Math.floor(number)) { alert("Integer") } else { alert("Decimal") } 

非常酷,也适用于像XX.0的东西! 它的工作原理是因为Math.floor()如果它有一个十进制数字,就会截掉任何十进制数,所以如果这个数字与原来的数字不同,我们知道它是十进制的! 并没有string转换:)

 parseInt(num) === num 

当传递一个数字时, parseInt()只是返回int的数字:

 parseInt(3.3) === 3.3 // false because 3 !== 3.3 parseInt(3) === 3 // true 

以下是我的后卫库(摘自David Herman的Effective JavaScript)的摘录:

 var guard = { guard: function(x) { if (!this.test(x)) { throw new TypeError("expected " + this); } } // ... }; // ... var number = Object.create(guard); number.test = function(x) { return typeof x === "number" || x instanceof Number; }; number.toString = function() { return "number"; }; var uint32 = Object.create(guard); uint32.test = function(x) { return typeof x === "number" && x === (x >>> 0); }; uint32.toString = function() { return "uint32"; }; var decimal = Object.create(guard); decimal.test = function(x) { return number.test(x) && !uint32.test(x); }; decimal.toString = function() { return "decimal"; }; uint32.guard(1234); // fine uint32.guard(123.4); // TypeError: expected uint32 decimal.guard(1234); // TypeError: expected decimal decimal.guard(123.4); // fine 

你可以乘以10 ,然后用10进行“ ”操作/除法,并检查这两个操作的结果是否为零。 这两个操作的结果会给你小数点后的第一个数字 。 如果结果等于零,那么这个数字是一个整数。

 if ( (int)(number * 10.0) % 10 == 0 ){ // your code } 

支票号码的function是十进制或整数

 function IsDecimalExist(p_decimalNumber) { var l_boolIsExist = true; if (p_decimalNumber % 1 == 0) l_boolIsExist = false; return l_boolIsExist; } 

将数字string转换为数组,按小数点拆分。 那么,如果数组只有一个值,那就意味着在string中没有小数。

 if(!number.split(".")[1]){ //do stuff } 

这样你也可以知道实际的整数和小数。 更先进的例子将是。

 number_to_array = string.split("."); inte = number_to_array[0]; dece = number_to_array[1]; if(!dece){ //do stuff } 
 $('.rsval').bind('keypress', function(e){ var asciiCodeOfNumbers = [48,46, 49, 50, 51, 52, 53, 54, 54, 55, 56, 57]; var keynum = (!window.event) ? e.which : e.keyCode; var val = this.value; var numlenght = val.length; var splitn = val.split("."); var decimal = splitn.length; var precision = splitn[1]; var startPos = this.selectionStart; var decimalIndex = val.indexOf('.'); if(decimal == 2) { if(decimalIndex < startPos){ if(precision.length >= 2){ e.preventDefault(); } } } if( keynum == 46 ){ if(startPos < (numlenght-2)){ e.preventDefault(); } if(decimal >= 2) { e.preventDefault(); } } if ($.inArray(keynum, asciiCodeOfNumbers) == -1) e.preventDefault(); }); 
 function isDecimal(num) { return (num !== parseInt(num, 10)); }