Javascript 检查数字是否有小数位/是否为整数
我正在寻找一种简单的JavaScript方法来检查一个数字是否有小数点(以确定它是否是整数)。比如说,Javascript 检查数字是否有小数位/是否为整数,javascript,validation,numbers,integer,Javascript,Validation,Numbers,Integer,我正在寻找一种简单的JavaScript方法来检查一个数字是否有小数点(以确定它是否是整数)。比如说, 23->OK 5->OK 3.5->不正常 34.345->不正常 使用将起作用: num % 1 != 0 // 23 % 1 = 0 // 23.5 % 1 = 0.5 请注意,这是基于数字的数值,无论格式如何。它将包含固定小数点的整数的数字字符串视为整数: '10.0' % 1; // returns 0 10 % 1; // returns 0 '10.5' % 1; // re
23->OK
5->OK
3.5->不正常
34.345->不正常
使用将起作用:
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
最常见的解决方案是去掉数字的整数部分,并将其与零进行比较,如下所示:
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
//把它拆了怎么样
Number.prototype.isInt= function(){
return this== this>> 0;
}
我总是觉得javascript中的位运算符有点糟糕-
他们几乎得不到任何锻炼。或者你可以用这个来确定它是否不是小数:
string.indexOf(".") == -1;
当传递一个数字时,parseInt()
只将数字返回为int:
parseInt(3.3) === 3.3 // false because 3 !== 3.3
parseInt(3) === 3 // true
简单,但有效
Math.floor(number) === number;
以下是我的守卫库的摘录(灵感来自David Herman的高效JavaScript):
校验数的函数为十进制或整数
function IsDecimalExist(p_decimalNumber) {
var l_boolIsExist = true;
if (p_decimalNumber % 1 == 0)
l_boolIsExist = false;
return l_boolIsExist;
}
将数字字符串转换为数组,按小数点拆分。然后,如果数组只有一个值,则表示字符串中没有小数
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
}
是ES6标准的一部分,IE11不支持
当
x%1!=0
返回true。您可以将其乘以10,然后对10进行“模运算/除法运算,并检查这两个运算的结果是否为零。这两个运算的结果将给出小数点后的第一个数字。
如果结果等于零,则该数字为整数
if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
非常酷,也适用于XX.0之类的东西!
它之所以有效,是因为Math.floor()去掉了任何小数点,如果它有一个小数点,那么如果地板与原始数字不同,我们就知道它是一个小数点!无字符串转换:)您可以使用不更改值的按位操作(
^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
Number.isInteger()
可能是最简洁的。如果它是整数,则返回true;如果它不是整数,则返回false。也许这对您有效
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位零结尾,则为整数
if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
const isRound=number=>number.toFixed(9).endsWith('000000000');
用于(设计数器=0;计数器<2;计数器+=0.1){
log({计数器,模:计数器%1,格式:counter.toFixed(9),isRound:isRound(counter)});
}
对于num=999999999999999999999
失败。先转换为字符串,然后再执行重新操作。在不转换为字符串的情况下为我工作。对于大于2^31-1的整数,这将失败,因为>
将值转换为带符号的32位整数。@kennebec真棒——这是迄今为止最有趣的解决方案。这是一个非常好的解决方案比正则表达式更简单。为什么不干脆startVal!=Math.floor(startVal)
?很好。概念相同,但你的版本更干净。@Andy E:这只适用于正数。负数不起作用。@SeeyaK:当然适用于负数。请随意试用。@DeepakGoyal-你提到的问题与JavaScript中处理非常大的数有关。我怀疑你是错的我必须得到一个库,它使用位操作和数组来处理大于JavaScript最大值的值。当然,另一个选择不是在JavaScript中这样做,而是将值传递给服务器端组件,在服务器端组件中,您可以使用一种语言或库来处理非常大的值。我没有否决投票,但我想说这是值得的关于20.0,仍然有一个小数点并且满足上面的要求。+1从我这里得到,因为我教了我一些新东西:)@Abe:没错,尽管我认为这不太可能。除非用字符串表示,否则无法通过编程方式确定20.0
是否有小数点。此外,没有任何其他解决方案因不解决这一问题而被否决;-)@SREEP:见上面的评论。0.00在JavaScript中表示为数值时不是0.00。它可以表示为字符串(“0.00”),在这种情况下,问题是“检查字符串是否为整数”,而不是“检查数字是否为整数”。@Swanidhi:你是什么意思?什么是无效的<代码>“10”。
是一个整数,结果将与“10”
或10
完全相同。OP询问是否检查一个数字是一个整数。他没有提到字符串-在这方面,安迪的答案是正确的。不需要解释。这很简单。如果字符串包含strCheck中的任何值,它就是一个十进制。。。(他错过了。尽管如此……我认为这是实际的解决方案,因为即使对于XX.0来说,在继续之前转换为字符串也是有效的。例如:yourname.toString.indexOf(“.”)
francisco_ssb..点符号是通用的…表示数学语言中的小数点位..这是通用的,应该适用于任何国家/地区。如果您谈论逗号(“,”),则必须转换为索引(“.”前的点(“.”),很明显……我认为当他指的是在某些国家不起作用时,他指的是货币,因为欧元使用逗号而不是小数点。然而,问题并不是针对货币,而是小数点……a
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
number = 20.5
if (number == Math.floor(number)) {
alert("Integer")
} else {
alert("Decimal")
}
function isDecimal(num) {
return (num !== parseInt(num, 10));
}
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);
Math.floor(value).toString() !== value