Comment puis-je vérifier qu'un nombre est flottant ou entier?

Comment trouver qu'un numéro est float ou integer ?

1.25 --> float  
1 --> integer  
0 --> integer  
0.25 --> float
621
demandé sur Sinister Beard 2010-10-08 00:55:54

30 réponses

vérifier s'il y a un reste lors de la division par 1:

function isInt(n) {
   return n % 1 === 0;
}

si vous ne savez pas que l'argument est un nombre, vous avez besoin de deux tests:

function isInt(n){
    return Number(n) === n && n % 1 === 0;
}

function isFloat(n){
    return Number(n) === n && n % 1 !== 0;
}
1085
répondu kennebec 2016-02-08 15:12:54

essayez ces fonctions pour vérifier si une valeur est une valeur primitive de nombre qui n'a pas de partie fractionnaire et est dans les limites de taille de ce qui peut être représenté comme un entier exact.

function isFloat(n) {
    return n === +n && n !== (n|0);
}

function isInteger(n) {
    return n === +n && n === (n|0);
}
142
répondu Dagg Nabbit 2013-10-23 23:58:23

pourquoi pas quelque chose comme ça:

var isInt = function(n) { return parseInt(n) === n };
81
répondu warfares 2011-11-28 18:55:17

il existe une méthode appelée Number.isInteger() qui n'est actuellement implémentée que dans la dernière version de Firefox et qui fait toujours partie de la proposition EcmaScript 6. Cependant MDN fournit un polyfill pour les autres navigateurs, qui correspond à celui spécifié dans ECMA harmony:

if (!Number.isInteger) {
  Number.isInteger = function isInteger (nVal) {
    return typeof nVal === "number" && isFinite(nVal) && nVal > -9007199254740992 && nVal < 9007199254740992 && Math.floor(nVal) === nVal;
  };
}
50
répondu paperstreet7 2017-05-08 06:12:04

vous pouvez utiliser une simple expression régulière:

function isInt(value) {

    var er = /^-?[0-9]+$/;

    return er.test(value);
}

Ou vous pouvez utiliser les fonctions ci-dessous, selon vos besoins. Ils sont développés par le projet PHPJS .

is_int() => vérifier si le type de variable est entier et si son contenu est entier

is_float() => vérifier si la variable type est float et si son contenu est float

ctype_digit() => vérifier si le type de variable est une chaîne de caractères et si son contenu n'a que des chiffres décimaux

"1519230920 mise à jour" Update 1

maintenant il vérifie les nombres négatifs aussi, merci pour @ ChrisBartley commentaire !

33
répondu Marcio Mazzucato 2017-05-23 12:26:35

Voici des fonctions efficaces qui vérifient si la valeur est un nombre ou peut être converti en toute sécurité en un nombre:

function isNumber(value) {
    if ((undefined === value) || (null === value)) {
        return false;
    }
    if (typeof value == 'number') {
        return true;
    }
    return !isNaN(value - 0);
}

et pour les entiers (retournerait false si la valeur est un float):

function isInteger(value) {
    if ((undefined === value) || (null === value)) {
        return false;
    }
    return value % 1 == 0;
}

l'efficacité ici est que parseInt (ou parseNumber) sont évités lorsque la valeur est déjà un nombre. Les deux fonctions de parsing toujours convertir en chaîne d'abord et ensuite essayer de analysez cette chaîne, qui serait un gaspillage si la valeur est déjà un nombre.

Merci aux autres postes ici pour fournir d'autres idées pour l'optimisation!

17
répondu Tal Liron 2011-07-17 21:42:58
function isInteger(x) { return typeof x === "number" && isFinite(x) && Math.floor(x) === x; }
function isFloat(x) { return !!(x % 1); }

// give it a spin

isInteger(1.0);        // true
isFloat(1.0);          // false
isFloat(1.2);          // true
isInteger(1.2);        // false
isFloat(1);            // false
isInteger(1);          // true    
isFloat(2e+2);         // false
isInteger(2e+2);       // true
isFloat('1');          // false
isInteger('1');        // false
isFloat(NaN);          // false
isInteger(NaN);        // false
isFloat(null);         // false
isInteger(null);       // false
isFloat(undefined);    // false
isInteger(undefined);  // false
11
répondu shime 2016-03-24 14:44:45
function isInt(n) 
{
    return n != "" && !isNaN(n) && Math.round(n) == n;
}
function isFloat(n){
    return n != "" && !isNaN(n) && Math.round(n) != n;
}

fonctionne pour tous les cas.

9
répondu Deepak Yadav 2013-02-12 13:03:22

comme d'autres l'ont mentionné, vous n'avez que des doubles en JS. Alors, comment définissez-vous un nombre entier? Il suffit de vérifier si le nombre arrondi est égal à lui-même:

function isInteger(f) {
    return typeof(f)==="number" && Math.round(f) == f;
}
function isFloat(f) { return typeof(f)==="number" && !isInteger(f); }
6
répondu Claudiu 2010-10-07 21:08:27

voici ce que j'utilise pour les entiers:

Math.ceil(parseFloat(val)) === val

Bref, sympa :) Travaille tout le temps. C'est ce que David Flanagan suggère si Je ne me trompe pas.

6
répondu Arman McHitarian 2013-05-20 17:01:29

tout nombre flottant avec une partie décimale zéro (par exemple 1.0, 12.00, 0.0) est implicitement moulé en nombre entier, il n'est donc pas possible de vérifier s'ils sont flottants ou non.

5
répondu Mike Mancini 2013-05-07 13:33:55
!!(24%1) // false
!!(24.2%1) // true
4
répondu Виктор Дакалов 2013-07-15 17:34:34
var isInt = function (n) { return n === (n | 0); };

N'ont pas eu un cas où cela n'a pas fait le travail.

4
répondu ankr 2013-12-08 16:01:02

Cela dépend vraiment de ce que vous voulez atteindre. Si vous voulez "émuler" langages fortement typés alors je vous suggère de ne pas essayer. Comme d'autres l'ont mentionné tous les nombres ont la même représentation (du même type).

utilisant quelque chose comme Claudiu fourni:

isInteger( 1.0 ) - > true

ce qui semble bien pour le bon sens, mais dans quelque chose comme C vous obtiendriez false

3
répondu galambalazs 2010-10-07 21:35:29

c'est aussi simple que:

if( n === parseInt(n) ) ...

essayez ceci dans la console:

x=1;
x===parseInt(x); // true
x="1";
x===parseInt(x); // false
x=1.1;
x===parseInt(x); // false, obviously

// BUT!

x=1.0;
x===parseInt(x); // true, because 1.0 is NOT a float!

cela trouble beaucoup de gens. Chaque fois que quelque chose est .0, ce n'est pas un flotteur plus. C'est un entier. Ou vous pouvez simplement l'appeler "numériques chose" car il n'y a pas de distinction stricte comme à l'époque en C. Bon vieux temps.

donc fondamentalement, tout ce que vous pouvez faire est de vérifier pour entier accepter le fait que 1.000 est un entier.

note Intéressante

il y avait un commentaire au sujet des nombres énormes. Les nombres énormes ne signifient aucun problème pour cette approche; chaque fois que parseInt est incapable de gérer le nombre (car il est trop grand) il retournera quelque chose d'autre que la valeur réelle ainsi le test retournera FALSE. C'est une bonne chose parce que si vous considérez quelque chose comme un "nombre", vous vous attendez normalement à ce que JS soit capable de calculer avec lui - donc, oui, les nombres sont limités et parseInt sera prendre cela en considération , pour le dire ainsi.

essayez ceci:

<script>

var a = 99999999999999999999;
var b = 999999999999999999999; // just one more 9 will kill the show!
var aIsInteger = (a===parseInt(a))?"a is ok":"a fails";
var bIsInteger = (b===parseInt(b))?"b is ok":"b fails";
alert(aIsInteger+"; "+bIsInteger);

</script>

dans mon navigateur (IE8) ce retour" a est ok; B échoue " qui est exactement en raison du nombre énorme dans B. La limite peut varier mais je suppose que 20 chiffres "devrait être assez pour n'importe qui", pour citer un classique:)

3
répondu dkellner 2014-04-26 15:10:32

C'EST LE CODE FINAL POUR LE CONTRÔLE À LA FOIS INT ET FLOAT

function isInt(n) { 
   if(typeof n == 'number' && Math.Round(n) % 1 == 0) {
       return true;
   } else {
       return false;
   }
} 

ou

function isInt(n) {   
   return typeof n == 'number' && Math.Round(n) % 1 == 0;   
}   
2
répondu Ken Le 2011-08-22 20:54:18
function isInteger(n) {
   return ((typeof n==='number')&&(n%1===0));
}

function isFloat(n) {
   return ((typeof n==='number')&&(n%1!==0));
}

function isNumber(n) {
   return (typeof n==='number');
}
2
répondu Vitim.us 2011-11-12 23:29:07

j'ai écrit une fonction qui accepte les chaînes (si quelqu'un en a besoin)

function isInt(x) {
    return !isNaN(x) && eval(x).toString().length == parseInt(eval(x)).toString().length
}

function isFloat(x) {
    return !isNaN(x) && !isInt(eval(x)) && x.toString().length > 0
}

exemple ouptuts:

console.log(isFloat('0.2'))  // true
console.log(isFloat(0.2))    // true
console.log(isFloat('.2'))   // true
console.log(isFloat('-.2'))  // true
console.log(isFloat(-'.2'))  // true
console.log(isFloat(-.2))    // true
console.log(isFloat('u.2'))  // false
console.log(isFloat('2'))    // false
console.log(isFloat('0.2u')) // false

console.log(isInt('187'))  // true
console.log(isInt(187))    // true
console.log(isInt('1.2'))  // false
console.log(isInt('-2'))   // true
console.log(isInt(-'1'))   // true
console.log(isInt('10e1')) // true
console.log(isInt(10e1))   // true
2
répondu Dariusz Majchrzak 2015-09-23 14:23:42

pour les entiers j'utilise ce

function integer_or_null(value) {
    if ((undefined === value) || (null === value)) {
        return null;
    }
    if(value % 1 != 0) {
        return null;
    }
    return value;
}
1
répondu neoneye 2011-09-04 09:33:53

ça ne doit pas être si compliqué. La valeur numérique des équivalents parseFloat() et parseInt() d'un entier sera la même. Ainsi vous pouvez faire ainsi:

function isInt(value){ 
    return (parseFloat(value) == parseInt(value)) && !isNaN(value);
}

puis

if (isInt(x)) // do work

cela permettra également de vérifier les chaînes de caractères et n'est donc pas strict. Si vous voulez une solution de type fort (aka, wont work with strings):

function is_int(value){ return !isNaN(parseInt(value * 1) }
1
répondu SpYk3HH 2012-11-19 00:35:17

en écriture java tous les numéros sont internally 64 bit floating point , identique au double en java. Il n'y a pas de types différents dans javascript, Tous sont représentés par le type number . Par conséquent, vous ne serez pas en mesure de faire un instanceof vérifier. Cependant u peut utiliser les solutions ci-dessus pour en savoir si c'est un nombre fractionnaire. les concepteurs de Java script ressenti avec un seul type, ils peuvent éviter de nombreuses erreurs de type moulé.

1
répondu Punith Raj 2013-02-14 11:56:19

ce n'est peut-être pas aussi performant que le % de réponse, ce qui vous empêche d'avoir à convertir en chaîne d'abord, mais je n'ai vu personne le poster encore, donc voici une autre option qui devrait fonctionner très bien:

function isInteger(num) {
    return num.toString().indexOf('.') === -1;
}
1
répondu Axle 2014-06-03 18:55:11

pour les curieux, avec Benchmark.js j'ai testé le plus voté réponses (et celui posté aujourd'hui) sur ce post, voici mes résultats:

var n = -10.4375892034758293405790;
var suite = new Benchmark.Suite;
suite
    // kennebec
    .add('0', function() {
        return n % 1 == 0;
    })
    // kennebec
    .add('1', function() {
        return typeof n === 'number' && n % 1 == 0;
    })
    // kennebec
    .add('2', function() {
        return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) && !isNaN(n);
    })

    // Axle
    .add('3', function() {
        return n.toString().indexOf('.') === -1;
    })

    // Dagg Nabbit
    .add('4', function() {
        return n === +n && n === (n|0);
    })

    // warfares
    .add('5', function() {
        return parseInt(n) === n;
    })

    // Marcio Simao
    .add('6', function() {
        return /^-?[0-9]+$/.test(n.toString());
    })

    // Tal Liron
    .add('7', function() {
        if ((undefined === n) || (null === n)) {
            return false;
        }
        if (typeof n == 'number') {
            return true;
        }
        return !isNaN(n - 0);
    });

// Define logs and Run
suite.on('cycle', function(event) {
    console.log(String(event.target));
}).on('complete', function() {
    console.log('Fastest is ' + this.filter('fastest').pluck('name'));
}).run({ 'async': true });

0 x 12,832,357 ops/sec ±0.65% (90 runs sampled)
1 x 12,916,439 ops/sec ±0.62% (95 runs sampled)
2 x 2,776,583 ops/sec ±0.93% (92 runs sampled)
3 x 10,345,379 ops/sec ±0.49% (97 runs sampled)
4 x 53,766,106 ops/sec ±0.66% (93 runs sampled)
5 x 26,514,109 ops/sec ±2.72% (93 runs sampled)
6 x 10,146,270 ops/sec ±2.54% (90 runs sampled)
7 x 60,353,419 ops/sec ±0.35% (97 runs sampled)

Fastest is 7 Tal Liron
1
répondu jnthnjns 2014-06-03 21:23:10

Voici mon code. Il vérifie pour s'assurer qu'il n'est pas une chaîne vide (qui autrement passera) et le convertit au format numérique. Maintenant, selon que vous voulez que " 1.1 " soit égal à 1.1, cela peut être ou non ce que vous recherchez.

var isFloat = function(n) {
    n = n.length > 0 ? Number(n) : false;
    return (n === parseFloat(n));
};
var isInteger = function(n) {
    n = n.length > 0 ? Number(n) : false;
    return (n === parseInt(n));
};

var isNumeric = function(n){

   if(isInteger(n) || isFloat(n)){
        return true;
   }
   return false;

};
1
répondu Michael Ryan Soileau 2014-07-30 16:00:07

j'aime cette petite fonction, qui retournera vrai pour les entiers positifs et négatifs:

function isInt(val) {
    return ["string","number"].indexOf(typeof(val)) > -1 && val !== '' && !isNaN(val+".0");
}

cela fonctionne parce que 1 ou" 1 "devient" 1.0", qui isNaN() retourne false on (que nous nions alors et retournons), mais 1.0 ou" 1.0 "devient" 1.0.0", tandis que" string "devient" string.0", qui ne sont pas des nombres, ainsi isNaN () retourne false (et, encore une fois, est nié).

si vous voulez seulement des entiers positifs, il y a cette variante:

function isPositiveInt(val) {
    return ["string","number"].indexOf(typeof(val)) > -1 && val !== '' && !isNaN("0"+val);
}

ou, pour les entiers négatifs:

function isNegativeInt(val) {
    return `["string","number"].indexOf(typeof(val)) > -1` && val !== '' && isNaN("0"+val);
}

isPositiveInt () fonctionne en déplaçant la chaîne numérique concaténée en avant de la valeur à tester. Par exemple, isPositiveInt(1) aboutit à isNaN() évaluant "01", qui évalue false. Entre-temps, isPositiveInt(-1) donne à isNaN() une évaluation de "0-1", qui évalue true. Nous nions la valeur de retour et cela nous donne ce que nous voulons. isNegativeInt () fonctionne de la même manière, mais sans nier la valeur de retour de la fonction isNaN().

Edit:

mon implémentation originale retournerait aussi true sur les tableaux et les chaînes vides. Cette mise en œuvre ne présente pas ce défaut. Il a également l'avantage de revient tôt si val n'est pas une chaîne ou un nombre, ou si c'est une chaîne vide, le rendant plus rapide dans ces cas. Vous pouvez encore le modifier en remplaçant les deux premières clauses par

typeof(val) != "number"

si vous voulez seulement correspondre à literal les nombres (et non pas des chaînes de caractères)

Edit:

Je ne peux pas encore poster de commentaires, donc j'ajoute ceci à ma réponse. Le benchmark affiché par @Asok est très instructif; cependant, la fonction la plus rapide ne répond pas aux exigences, car il retourne également vrai pour les flotteurs, les tableaux, les booléens, et les chaînes vides.

j'ai créé la suite de test suivante pour tester chacune des fonctions, en ajoutant ma réponse à la liste, ainsi (Fonction 8, qui analyse les chaînes, et la fonction 9, qui n'est pas):

funcs = [
    function(n) {
        return n % 1 == 0;
    },
    function(n) {
        return typeof n === 'number' && n % 1 == 0;
    },
    function(n) {
        return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) && !isNaN(n);
    },
    function(n) {
        return n.toString().indexOf('.') === -1;
    },
    function(n) {
        return n === +n && n === (n|0);
    },
    function(n) {
        return parseInt(n) === n;
    },
    function(n) {
        return /^-?[0-9]+$/.test(n.toString());
    },
    function(n) {
        if ((undefined === n) || (null === n)) {
            return false;
        }
        if (typeof n == 'number') {
            return true;
        }
        return !isNaN(n - 0);
    },
    function(n) {
        return ["string","number"].indexOf(typeof(n)) > -1 && n !== '' && !isNaN(n+".0");
    }
];
vals = [
    [1,true],
    [-1,true],
    [1.1,false],
    [-1.1,false],
    [[],false],
    [{},false],
    [true,false],
    [false,false],
    [null,false],
    ["",false],
    ["a",false],
    ["1",null],
    ["-1",null],
    ["1.1",null],
    ["-1.1",null]
];

for (var i in funcs) {
    var pass = true;
    console.log("Testing function "+i);
    for (var ii in vals) {
        var n = vals[ii][0];
        var ns;
        if (n === null) {
            ns = n+"";
        } else {
            switch (typeof(n)) {
                case "string":
                    ns = "'" + n + "'";
                    break;
                case "object":
                    ns = Object.prototype.toString.call(n);
                    break;
                default:
                    ns = n;
            }
            ns = "("+typeof(n)+") "+ns;
        }

        var x = vals[ii][1];
        var xs;
        if (x === null) {
            xs = "(ANY)";
        } else {
            switch (typeof(x)) {
                case "string":
                    xs = "'" + n + "'";
                    break;
                case "object":
                    xs = Object.prototype.toString.call(x);
                    break;
                default:
                    xs = x;
            }
            xs = "("+typeof(x)+") "+xs;
        }

        var rms;
        try {
            var r = funcs[i](n);
            var rs;
            if (r === null) {
                rs = r+"";
            } else {
                switch (typeof(r)) {
                    case "string":
                        rs = "'" + r + "'";
                        break;
                    case "object":
                        rs = Object.prototype.toString.call(r);
                        break;
                    default:
                        rs = r;
                }
                rs = "("+typeof(r)+") "+rs;
            }

            var m;
            var ms;
            if (x === null) {
                m = true;
                ms = "N/A";
            } else if (typeof(x) == 'object') {
                m = (xs === rs);
                ms = m;
            } else {
                m = (x === r);
                ms = m;
            }
            if (!m) {
                pass = false;
            }
            rms = "Result: "+rs+", Match: "+ms;
        } catch (e) {
            rms = "Test skipped; function threw exception!"
        }

        console.log("    Value: "+ns+", Expect: "+xs+", "+rms);
    }
    console.log(pass ? "PASS!" : "FAIL!");
}

j'ai aussi réutilisé le benchmark avec la fonction #8 ajoutée à la liste. Je ne posterai pas le résultat, car ils sont un peu embarrassants (par exemple, cette fonction N'est pas rapide)...

(abrégée -- j'ai enlevé des essais réussis, car la sortie est assez long), les résultats sont comme suit:

Testing function 0
Value: (object) [object Array], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) true, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) false, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: null, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
FAIL!

Testing function 1
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

Testing function 2
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

Testing function 3
Value: (object) true, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (object) false, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Array], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Object], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: null, Expect: (boolean) false, Test skipped; function threw exception!
Value: (string) '', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) 'a', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
FAIL!

Testing function 4
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

Testing function 5
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

Testing function 6
Value: null, Expect: (boolean) false, Test skipped; function threw exception!
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

Testing function 7
Value: (number) 1.1, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (number) -1.1, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (object) true, Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Array], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (boolean) [object Object], Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '', Expect: (boolean) false, Result: (boolean) true, Match: false
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) true, Match: N/A
FAIL!

Testing function 8
Value: (string) '1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) true, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

Testing function 9
Value: (string) '1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
Value: (string) '-1.1', Expect: (ANY), Result: (boolean) false, Match: N/A
PASS!

j'ai laissé dans les échecs de sorte que vous pouvez voir où chaque fonction échoue, et le (string) '#' tests ainsi vous pouvez voir comment chaque fonction gère les valeurs entières et flottantes dans les chaînes, comme certains peuvent vouloir ces parsed comme des nombres et certains peuvent ne pas.

sur les 10 fonctions testées, celles qui répondent réellement aux exigences de L'OP sont [1,3,5,6,8,9]

1
répondu KeMBro2012 2014-08-08 17:58:32

Condtion flottants pour la validation :

if (lnk.value == +lnk.value && lnk.value != (lnk.value | 0)) 

Condtion de validation Entier :

if (lnk.value == +lnk.value && lnk.value == (lnk.value | 0)) 

J'espère que cela pourrait être utile.

1
répondu Joe Mike 2014-08-13 11:03:13
function int(a) {
  return a - a === 0 && a.toString(32).indexOf('.') === -1
}

function float(a) {
  return a - a === 0 && a.toString(32).indexOf('.') !== -1
}

vous pouvez ajouter typeof a === 'number' si vous voulez exclure les chaînes.

1
répondu Mirek Rusin 2015-02-24 01:02:06

YourJS fournit les deux fonctions suivantes qui fonctionnent pour tous les numéros, y compris le renvoi false pour -Infinity et Infinity :

function isFloat(x) {
  return typeOf(x, 'Number') && !!(x % 1);
}

function isInt(x) {
  return typeOf(x, 'Number') && x % 1 == 0;
}

en raison du fait que typeOf() est une fonction interne de YourJS, si vous voulez utiliser ces définitions, vous pouvez télécharger la version pour juste ces fonctions ici: http://yourjs.com/snippets/build/34

1
répondu Chris West 2015-11-25 11:57:44

parfois nombre objets ne vous permettent pas d'utiliser direct l'opérateur mod (%), si vous faites face à ce cas, vous pouvez utiliser cette solution.

if(object instanceof Number ){
   if( ((Number) object).doubleValue() % 1 == 0 ){
      //your object is an integer
   }
   else{
      //your object is a double
   }
}
1
répondu toddsalpen 2016-06-02 21:35:26

Cette solution a fonctionné pour moi.

<html>
<body>
  <form method="post" action="#">
    <input type="text" id="number_id"/>
    <input type="submit" value="send"/>
  </form>
  <p id="message"></p>
  <script>
    var flt=document.getElementById("number_id").value;
    if(isNaN(flt)==false && Number.isInteger(flt)==false)
    {
     document.getElementById("message").innerHTML="the number_id is a float ";
    }
   else 
   {
     document.getElementById("message").innerHTML="the number_id is a Integer";
   }
  </script>
</body>
</html>
1
répondu Abdelraouf GR 2018-03-29 11:57:31