Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查数字是否有小数位/是否为整数_Javascript_Validation_Numbers_Integer - Fatal编程技术网

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

我正在寻找一种简单的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; // 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