Answers:
使用模数将起作用:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
请注意,这是基于数字值的数量,不论格式。它处理包含整数且固定小数点与整数相同的数字字符串:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
20.0
除非用字符串表示,否则无法以编程方式说出是否有小数点。此外,没有其他解决方案因不解决该问题而遭到否决;-)
"10."
是一个整数,结果将与"10"
或完全相同10
。
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
Number.isInteger()是ES6标准的一部分,在IE11中不受支持。
对于NaN
,它返回false ,Infinity
而非数字参数则x % 1 != 0
返回true。
Number.isInteger(12.0)
返回true
。
Number.isInteger('1e3')
is false
,即使它Number.isInteger(1e3)
是正确的。假设问题的目的是查找非整数值(而不是表示形式中实际存在小数点),则字符串值“ 12.0” 应该通过,因为它表示整数,但Number.isInteger('12.0')
还是false
。
number
是否完整。如果您的输入是字符串,那么您当然需要将其转换为number
第一个,例如,通过parseFloat()
。
或者,您可以使用它来确定它是否不是小数:
string.indexOf(".") == -1;
yournumber.toString.indexOf(".")
最常见的解决方案是剥离数字的整数部分,并将其与零进行比较,如下所示:
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
startVal != Math.floor(startVal)
呢?
Math.Floor
函数采用一个十进制值,JavaScript中允许的最大十进制值为2^53 - 1
或9007199254740991
。由于893144042145698745.3
大于此最大值,因此该功能将失败。
简单但有效!
Math.floor(number) === number;
Math.floor(3.0) == 3.0
是Math.floor(3.3) == 3.3
是假
//字节化怎么样?
Number.prototype.isInt= function(){
return this== this>> 0;
}
我总是对javascript-中的位运算符感到不好
他们几乎没有运动。
>>
它将值转换为带符号的32位整数。
number = 20.5
if (number == Math.floor(number)) {
alert("Integer")
} else {
alert("Decimal")
}
很酷,也可以用于XX.0之类的东西!之所以起作用,是因为Math.floor()会舍去任何一个小数(如果有一个小数),因此如果下限与原始数字不同,我们知道它是一个小数!而且没有字符串转换:)
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);
num= 999999999999999999999
。
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;
}
parseInt(num) === num
传递数字时,parseInt()
仅将数字返回为int:
parseInt(3.3) === 3.3 // false because 3 !== 3.3
parseInt(3) === 3 // true
parseInt(3.0) === 3.0 // 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
function isWholeNumber(num) {
return num === Math.round(num);
}
您可以使用以下函数检查数字是否有小数位:
function hasDecimal(num){
return !!(num % 1);
}
console.log(hasDecimal(2)); //false
console.log(hasDecimal(2.32423)); //true
因此,显然一些用户想要解释。我将其分成几部分:(num%1)
括号表示先执行那些操作。num-函数传入的变量。%-模数符号,试图将左数除以右。如果有余数,则以小数形式返回。如果平均分配,则返回0。
因此,总结一下到目前为止,(num%1)将返回:
均分时为0,否则为#。#####
0 ==错误。
[ANY_NUMBER_NOT_ZERO] ==正确。
示例:new Boolean(0)是false new Boolean(12312.1231)是true
其他替代方案:用户可以尝试返回(num%1)。的值,这基本上可以实现相同的目的。由于return(0)为false,而return(1.213113)为true。
但是我想返回一个布尔值。因此,作为将值强制转换为布尔值的快捷方式,我添加了!前面的符号。
可能知道的很多。表示不。但这也将值强制为布尔值。
自!symobol将值强制为布尔值,然后反转其值。我用 !!强制将值转换为布尔值并将其值转换回其原始布尔值。
也许这对您有用?
它使用正则表达式检查数字中是否有逗号,如果没有,则将添加逗号和条纹。
var myNumber = '50';
function addCommaStripe(text){
if(/,/.test(text) == false){
return text += ',-';
} else {
return text;
}
}
myNumber = addCommaStripe(myNumber);
如果值是字符串(例如,来自<input
),请使用以下命令:
Math.floor(value).toString() !== value
我添加.toString()
到地板上以使其也适用于value == "1."
(以小数点分隔符或其他字符串结尾)的情况。也Math.floor
总是返回一些值,所以.toString()
永远不会失败。