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

时间:2010-02-20 22:48:10

标签: javascript validation numbers integer

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

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

23 个答案:

答案 0 :(得分:690)

使用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

答案 1 :(得分:41)

或者你可以用它来查明它是不是小数:

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

答案 2 :(得分:31)

Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 

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

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

答案 3 :(得分:20)

最常见的解决方案是剥去数字的整数部分,并将其与零进行比较,如下所示:

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

答案 4 :(得分:19)

//如何对其进行字节编码?

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

我总觉得javascript-

中的位操作符有点坏 他们几乎没有运动。

答案 5 :(得分:16)

简单但有效!

Math.floor(number) == number;

答案 6 :(得分:4)

number = 20.5

if (number == Math.floor(number)) {

alert("Integer")

} else {

alert("Decimal")

}

非常酷,适用于像XX.0这样的东西! 它的工作原理是因为Math.floor()会删除任何小数,如果它有一个小数,所以如果地板与原始数字不同,我们知道它是小数!并且没有字符串转换:)

答案 7 :(得分:4)

var re=/^-?[0-9]+$/;
var num=10;
re.test(num);

答案 8 :(得分:3)

2018-09-03 14:19:04.277 o.a.s.util Thread-8-40-PROJECTION-executor[3 3] [ERROR] Async loop died! java.lang.RuntimeException: Error compiling query. Statements [[CREATE EXTERNAL TABLE RULETABLE ("recordType" VARCHAR, "IMSI" VARCHAR, "IMSI_LENGTH" VARCHAR) LOCATION 'RULESCHEMA:///RULETABLE', SELECT STREAM RULETABLE."recordType", RULETABLE."IMSI", RULETABLE."IMSI_LENGTH" FROM RULETABLE ]] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlEngine.compileQuery(SqlEngine.java:56) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlScript.<init>(SqlScript.java:88) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlScript.<init>(SqlScript.java:65) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.processor.RuleProcessorRuntime.createSqlScript(RuleProcessorRuntime.java:245) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.processor.RuleProcessorRuntime.initializeRuleRuntimes(RuleProcessorRuntime.java:156) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.processor.RuleProcessorRuntime.initialize(RuleProcessorRuntime.java:83) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.storm.bolt.rules.RulesBolt.prepare(RulesBolt.java:77) ~[stormjar.jar:?] at org.apache.storm.daemon.executor$fn_9633$fn9646.invoke(executor.clj:810) ~[storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at org.apache.storm.util$async_loop$fn555.invoke(util.clj:482) [storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65] Caused by: java.lang.NullPointerException at com.hortonworks.streamline.streams.sql.compiler.javac.CompilingClassLoader.compileSourceCodeToByteCode(CompilingClassLoader.java:147) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.sql.compiler.javac.CompilingClassLoader.<init>(CompilingClassLoader.java:116) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.sql.compiler.PlanCompiler.compile(PlanCompiler.java:126) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.sql.StreamlineSqlImpl.execute(StreamlineSqlImpl.java:86) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlEngine.compileQuery(SqlEngine.java:52) ~[stormjar.jar:?] ... 10 more 2018-09-03 14:19:04.281 o.a.s.d.executor Thread-8-40-PROJECTION-executor[3 3] [ERROR] java.lang.RuntimeException: Error compiling query. Statements [[CREATE EXTERNAL TABLE RULETABLE ("recordType" VARCHAR, "IMSI" VARCHAR, "IMSI_LENGTH" VARCHAR) LOCATION 'RULESCHEMA:///RULETABLE', SELECT STREAM RULETABLE."recordType", RULETABLE."IMSI", RULETABLE."IMSI_LENGTH" FROM RULETABLE ]] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlEngine.compileQuery(SqlEngine.java:56) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlScript.<init>(SqlScript.java:88) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlScript.<init>(SqlScript.java:65) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.processor.RuleProcessorRuntime.createSqlScript(RuleProcessorRuntime.java:245) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.processor.RuleProcessorRuntime.initializeRuleRuntimes(RuleProcessorRuntime.java:156) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.processor.RuleProcessorRuntime.initialize(RuleProcessorRuntime.java:83) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.storm.bolt.rules.RulesBolt.prepare(RulesBolt.java:77) ~[stormjar.jar:?] at org.apache.storm.daemon.executor$fn9633$fn9646.invoke(executor.clj:810) ~[storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at org.apache.storm.util$async_loop$fn555.invoke(util.clj:482) [storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65] Caused by: java.lang.NullPointerException at com.hortonworks.streamline.streams.sql.compiler.javac.CompilingClassLoader.compileSourceCodeToByteCode(CompilingClassLoader.java:147) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.sql.compiler.javac.CompilingClassLoader.<init>(CompilingClassLoader.java:116) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.sql.compiler.PlanCompiler.compile(PlanCompiler.java:126) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.sql.StreamlineSqlImpl.execute(StreamlineSqlImpl.java:86) ~[stormjar.jar:?] at com.hortonworks.streamline.streams.runtime.rule.sql.SqlEngine.compileQuery(SqlEngine.java:52) ~[stormjar.jar:?] ... 10 more 2018-09-03 14:19:04.298 o.a.s.util Thread-8-40-PROJECTION-executor[3 3] [ERROR] Halting process: ("Worker died") java.lang.RuntimeException: ("Worker died") at org.apache.storm.util$exit_process_BANG.doInvoke(util.clj:341) [storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at clojure.lang.RestFn.invoke(RestFn.java:423) [clojure-1.7.0.jar:?] at org.apache.storm.daemon.worker$fn_10241$fn10242.invoke(worker.clj:781) [storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at rg.apache.storm.daemon.executor$mk_executor_data$fn9448$fn9449.invoke(executor.clj:281) [storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at org.apache.storm.util$async_loop$fn_555.invoke(util.clj:494) [storm-core-1.1.1.3.1.2.0-7.jar:1.1.1.3.1.2.0-7] at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65] 2018-09-03 14:19:04.299 o.a.s.d.worker Thread-21 [INFO] Shutting down worker streamline-1-Application_Mediacion_V1-26-1535992492 8fec64de-2357-47e5-b774-35ea9120a2b7 6700 2018-09-03 14:19:04.300 o.a.s.d.worker Thread-21 [INFO] Terminating messaging context 2018-09-03 14:19:04.300 o.a.s.d.worker Thread-21 [INFO] Shutting down executors 可能是最简洁的。如果它是整数,则返回true;否则,则返回false。

答案 9 :(得分:2)

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;
}

答案 10 :(得分:1)

您可以将其乘以10 ,然后执行&#34; modulo &#34; operation / divison with 10 ,并检查这两个操作的结果是否为零。这两个操作的结果将在小数点后给出第一个数字。 如果结果等于零,则数字是整数。

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

答案 11 :(得分:1)

这里是我的警卫库的摘录(受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

答案 12 :(得分:1)

您可以使用以下功能检查数字是否有小数位:

function hasDecimal(num){
    return !!(num % 1);
}

console.log(hasDecimal(2)); //true
console.log(hasDecimal(2.32423)); //false

因此,显然一些用户希望解释。 我将其分成几部分:(num%1)

括号表示先执行那些操作。 num-函数传入的变量。 %-模数符号,试图将左数除以右。如果有余数,则以小数形式返回。如果平均分配,则返回0。

所以,总结一下到目前为止,(num%1)将返回:

0(如果平均分配),否则为#。#####(如果不是)

0 ==否。

[ANY_NUMBER_NOT_ZERO] ==正确。

示例:new Boolean(0)为false新Boolean(12312.1231)为true

其他替代方法:用户本可以尝试返回(num%1)。的值,这基本上可以实现相同的目的。由于return(0)为false,return(1.213113)为true。

但是我想返回一个布尔值。因此,作为将值强制转换为布尔值的快捷方式,我添加了!之前的符号。

尽可能多的知道!表示不。但这也将值强制为布尔值。

因为! symobol将值强制为布尔值,并反转其值。我用 !!强制将值转换为布尔值并将其值转换回其原始布尔值。

答案 13 :(得分:1)

parseInt(num) === num

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

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

答案 14 :(得分:0)

将数字字符串转换为数组,按小数点分割。然后,如果数组只有一个值,则表示字符串中没有小数。

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
}

答案 15 :(得分:0)

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

function IsDecimalExist(p_decimalNumber) {
    var l_boolIsExist = true;

    if (p_decimalNumber % 1 == 0)
        l_boolIsExist = false;

    return l_boolIsExist;
}

答案 16 :(得分:0)

function isDecimal(num) {
  return (num !== parseInt(num, 10));
}

答案 17 :(得分:0)

您可以使用不更改值(^ 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

答案 18 :(得分:0)

function isWholeNumber(num) {
  return num === Math.round(num);
}

答案 19 :(得分:0)

也许这对您有用吗?

它使用正则表达式检查数字中是否有逗号,如果没有,则将添加逗号和条纹。

var myNumber = '50';
function addCommaStripe(text){
    if(/,/.test(text) == false){
        return text += ',-';
    } else {
        return text;
    }
}
myNumber = addCommaStripe(myNumber);

答案 20 :(得分:0)

如果值是字符串(例如,来自<input),请使用以下命令:

Math.floor(value).toString() !== value

我在地板上添加了.toString()以使其在value == "1."(以小数点分隔符或另一个字符串结尾)的情况下也起作用。而且Math.floor总是返回一些值,因此.toString()永远不会失败。

答案 21 :(得分:0)

当使用带十进制步长的计数器时,检查数字是否为四舍五入实际上会失败,如下所示。因此,将数字格式化为 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) });
}

答案 22 :(得分:0)

Number.isSafeInteger(value);

在 JavaScript 中,isSafeInteger() 是一个 Number 方法,用于返回一个布尔值,指示一个值是否为安全整数。这意味着它是一个整数值,可以准确地表示为 IEEE-754 双精度数,无需四舍五入。