我在JavaScript中寻找一种简单的方法来检查数字中是否有小数位(以确定它是否为整数)。例如,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
答案 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不支持。
NaN
,Infinity
和非数字参数返回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 双精度数,无需四舍五入。