我正在寻找一种在 JavaScript 中检查数字是否有小数位的简单方法(以确定它是否为整数)。例如,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
使用 modulus 将起作用:
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
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
Number.isInteger() 是 ES6 标准的一部分,在 IE11 中不受支持。
它为 NaN
、Infinity
和非数字参数返回 false,而 x % 1 != 0
返回 true。
Number.isInteger(12.0)
返回 true
。
number
是否完整。如果您的输入是一个字符串,您当然需要先将其转换为 number
,例如通过 parseFloat()
。
Number.isInteger(2.000000000000000000001)
// true
2.000000000000000000001 === 2
或者您可以使用它来确定它是否不是小数:
string.indexOf(".") == -1;
yournumber.toString.indexOf(".")
简单但有效!
Math.floor(number) === number;
Math.floor(3.0) == 3.0
为真,Math.floor(3.3) == 3.3
为假
最常见的解决方案是去除数字的整数部分并将其与零进行比较,如下所示:
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
startVal != Math.floor(startVal)
?
//对它进行字节处理怎么样?
Number.prototype.isInt= function(){
return this== this>> 0;
}
我总是觉得 javascript 中的位运算符有点糟糕-
他们几乎没有得到任何锻炼。
>>
会将值转换为有符号 32 位整数。
Number.isSafeInteger(value);
在 JavaScript 中,isSafeInteger() 是一个 Number 方法,用于返回一个布尔值,指示一个值是否为安全整数。这意味着它是一个整数值,可以精确地表示为 IEEE-754 双精度数而无需四舍五入。
Number.isInteger()
可能是最简洁的。如果是整数则返回 true,否则返回 false。
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
将数字字符串转换为数组,按小数点分割。然后,如果数组只有一个值,则意味着字符串中没有小数。
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
}
如果值为字符串(例如来自 <input
),请使用以下内容:
Math.floor(value).toString() !== value
我将 .toString()
添加到 floor 以使其也适用于 value == "1."
(以小数分隔符或其他字符串结尾)的情况。此外,Math.floor
总是返回一些值,因此 .toString()
永远不会失败。
这是我的警卫库的摘录(灵感来自 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 isDecimal(num) {
return (num !== parseInt(num, 10));
}
您可以使用不改变值的按位运算(^ 0
或 ~~
)丢弃可用于舍入的小数部分。将数字四舍五入后,将其与原始值进行比较:
function isDecimal(num) {
return (num ^ 0) !== num;
}
console.log( isDecimal(1) ); // false
console.log( isDecimal(1.5) ); // true
console.log( isDecimal(-0.5) ); // true
function isWholeNumber(num) {
return num === Math.round(num);
}
也许这对你有用?
它使用正则表达式检查数字中是否有逗号,如果没有,则添加逗号和条纹。
var myNumber = '50';
function addCommaStripe(text){
if(/,/.test(text) == false){
return text += ',-';
} else {
return text;
}
}
myNumber = addCommaStripe(myNumber);
当使用带小数步长的计数器时,检查数字是否为整数实际上会失败,如下所示。因此,用 9 个(可能更多)小数位格式化数字可能是最安全的(虽然速度很慢),如果它以 9 个零结尾,那么它就是一个整数。
const isRound = number => number.toFixed(9).endsWith('000000000'); for (let counter = 0; counter < 2; counter += 0.1) { console.log({ counter, modulo: counter % 1, formatted: counter.toFixed(9), isRound: isRound(counter) }); }
校验号的功能是小数或整数
function IsDecimalExist(p_decimalNumber) {
var l_boolIsExist = true;
if (p_decimalNumber % 1 == 0)
l_boolIsExist = false;
return l_boolIsExist;
}
不定期副业成功案例分享
20.0
是否有小数点,除非它表示为字符串。此外,没有其他解决方案因不解决该问题而被否决;-)"10."
是一个整数,结果与"10"
或10
完全相同。