web-dev-qa-db-ja.com

数字に小数点以下の桁数があるかどうか/整数かどうかを確認

私は、JavaScriptで、数字に小数点以下の桁数があるかどうかをチェックする簡単な方法を探しています(整数かどうかを判断するため)。例えば、

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

係数 を使うとうまくいくでしょう:

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
696
Andy E

それとも10進数でないかどうかを調べるために使用することができます:

string.indexOf(".")==-1;
42
Ike
Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 

Number.isInteger() はES6規格の一部であり、IE11ではサポートされていません。

NaNInfinity、および数値以外の引数に対してはfalseを返し、x % 1 != 0はtrueを返します。

33
le_m

最も一般的な解決策は、数値の整数部分を取り除き、次のようにゼロと比較することです。

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

//バイトするのはどうですか?

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

私はいつもJavaScriptのビット演算子にはちょっと悪い感じがします

彼らはほとんど運動をしません。

19
kennebec

シンプルだが効果的!

Math.floor(number) == number;
16
dYale
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);
4
ghostdog74
number = 20.5

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

alert("Integer")

} else {

alert("Decimal")

}

かなりクールで、XX.0のようなものにも効果があります!これは、Math.floor()が小数点を持っている場合は小数点を切り落とすために機能します。つまり、フロアが元の数と異なる場合は、小数点が10進であることがわかります。そして文字列変換はありません:)

4
CUZLOCKED

Number.isInteger()はおそらく最も簡潔です。整数の場合はtrueを返し、整数でない場合はfalseを返します。

3
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;
}
2
Vitor Lins

次の関数を使用して、数値に小数点以下の桁数があるかどうかを確認できます。

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

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

そのため、一部のユーザーは説明を求めているようです。それをバラバラにします:(num%1)

括弧は最初にそれらの操作を実行することを意味します。 num - 関数によって渡される変数% - 左の数を右の数で除算しようとするモジュラスシンボル余りがある場合は10進数で返します。均等に分割した場合は0を返します。

それで、これまでのものをまとめると、(num%1)が返されます。

均等に分割した場合は0 OR#。そうでない場合は#####

0 == false.

[ANY_NUMBER_NOT_ZERO] == true.

例:new Boolean(0)はfalseですnew new(12312.1231)はtrueです

他の選択肢:ユーザーが(num%1)の値を返そうとした可能性がありますが、これは基本的に同じことを実現します。 return(0)はfalseでreturn(1.213113)はtrueなので。

しかし、私はブール値を返したかったのです。それで、値をブール値に強制するための近道として、私は追加しました!その前にシンボル。

知っているかもしれない限り。 NOTを意味します。しかし、それはまた値をブール値に強制します。

以来! symobolは値をブール値に変換し、その値を反転します。私が使う !!値を強制的にブール値に変換し、その値を元のブール値に戻します。

1
twalow

これが私のガードライブラリからの抜粋です(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
1
schirrmacher
parseInt(num) === num

数値が渡されると、parseInt()は数値をintとして返します。

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

10を掛けるしてから "modulo"の演算/除算10でを実行して、その2つの演算の結果がゼロかどうかをチェックすることができます。その2つの演算の結果は、小数点の後に最初の桁を与えるでしょう。 resultがゼロの場合、数値は整数です。

if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
1
BSevo
function isDecimal(num) {
  return (num !== parseInt(num, 10));
}
0
Steve Brush
function isWholeNumber(num) {
  return num === Math.round(num);
}
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
0
makovkastar

チェック番号の機能は10進数または整数

function IsDecimalExist(p_decimalNumber) {
    var l_boolIsExist = true;

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

    return l_boolIsExist;
}
0
user3897934

Number.isInteger(1000000000000000.01)に注意してください

trueを返します

0
Gaëtan Mallet

数値文字列を小数点に分割して配列に変換します。その後、配列に値が1つしかない場合は、文字列に10進数がないことを意味します。

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
}
0
Kareem

おそらくこれはあなたのために働く?

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