回答:
係数を使用するとうまくいきます:
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
20.0
文字列で表現しない限り、プログラムで小数点があるかどうかを判断することはできません。また、他の解決策はどれも、それに取り組んでいないという理由で反対票を獲得しませんでした;-)
"10."
全体の数であり、結果は全く同じになります"10"
か10
。
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
Number.isInteger()はES6標準の一部であり、IE11ではサポートされていません。
はfalseを返しNaN
、Infinity
数値以外の引数x % 1 != 0
はtrue を返します。
Number.isInteger(12.0)
を返しますtrue
。
Number.isInteger('1e3')
あるfalse
にもかかわらず、Number.isInteger(1e3)
真実です。質問の意図が(表現に小数点が実際に存在するのではなく)非整数値を見つけることであるとすると、文字列値「12.0」は整数を表すため、渡されますが、これもNumber.isInteger('12.0')
ですfalse
。
number
が全体であるかどうかです。入力が文字列の場合は、もちろんそれをnumber
最初の文字列に変換する必要がありますparseFloat()
。
または、これを使用して、それが小数でないかどうかを調べることもできます。
string.indexOf(".") == -1;
yournumber.toString.indexOf(".")
最も一般的な解決策は、数値の整数部分を取り除き、次のようにゼロと比較することです。
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
startVal != Math.floor(startVal)
ですか?
Math.Floor
関数は10進数値を取り、JavaScriptで許可されている最大の10進数値は2^53 - 1
または9007199254740991
です。893144042145698745.3
はこの最大値より大きいため、関数は失敗します。
シンプルだが効果的!
Math.floor(number) === number;
Math.floor(3.0) == 3.0
真である、Math.floor(3.3) == 3.3
偽である
//それをバイト化するのはどうですか?
Number.prototype.isInt= function(){
return this== this>> 0;
}
私はいつもJavaScriptのビット演算子に少し悪い気がします-
彼らはほとんど運動をしません。
>>
値を符号付き32ビット整数に変換するため、2 ^ 31-1より大きい整数では失敗します。
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
。
Number.isInteger()
おそらく最も簡潔です。整数の場合はtrueを返し、そうでない場合はfalseを返します。
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;
}
これが私のガードライブラリからの抜粋です(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
function isWholeNumber(num) {
return num === Math.round(num);
}
次の関数を使用して、数値に小数点以下の桁があるかどうかを確認できます。
function hasDecimal(num){
return !!(num % 1);
}
console.log(hasDecimal(2)); //false
console.log(hasDecimal(2.32423)); //true
したがって、明らかに一部のユーザーは説明を求めています。私はそれをバラバラにします:(num%1)
括弧は、これらの操作を最初に実行することを意味します。num-関数によって渡される変数。%-左の数値を右の数値で除算しようとする係数シンボル。余りがある場合は、10進数として返します。均等に分割すると0を返します。
つまり、これまでのところを要約すると、(num%1)が返されます。
均等に分割された場合は0、そうでない場合は#。#####
0 == false。
[ANY_NUMBER_NOT_ZERO] == true。
例:new Boolean(0)はfalse new Boolean(12312.1231)はtrue
その他の選択肢:ユーザーが(num%1)の値を返そうとした可能性がありますが、これは基本的に同じことを実現します。return(0)はfalseであり、return(1.213113)はtrueであるため。
しかし、ブール値を返したかったのです。値をブール値に強制するショートカットとして、私は!その前のシンボル。
知っているかもしれない限り、。は意味しません。ただし、値をブール値に強制します。
以来!symobolは値をブール値に強制し、その値を逆にします。私が使う !!値をブール値に強制し、その値を元のブール値に反転します。
チェック番号の関数は10進数または整数です
function IsDecimalExist(p_decimalNumber) {
var l_boolIsExist = true;
if (p_decimalNumber % 1 == 0)
l_boolIsExist = false;
return l_boolIsExist;
}
多分これはあなたのために働きますか?
正規表現を使用して、数値にカンマがあるかどうかを確認します。カンマがない場合は、カンマとストライプを追加します。
var myNumber = '50';
function addCommaStripe(text){
if(/,/.test(text) == false){
return text += ',-';
} else {
return text;
}
}
myNumber = addCommaStripe(myNumber);
値が文字列の場合(たとえばから<input
)、次を使用します。
Math.floor(value).toString() !== value
(小数点区切り文字または別の文字列で終わる).toString()
場合にも機能するように、floor を追加しvalue == "1."
ます。また、Math.floor
常に何らかの値を返すため、.toString()
失敗することはありません。