877 Stimmen

Wie prüfe ich, ob es sich bei einer Zahl um eine Fließkommazahl oder eine ganze Zahl handelt?

Wie man herausfindet, dass eine Zahl float o integer ?

1.25 --> float  
1 --> integer  
0 --> integer  
0.25 --> float

55 Stimmen

Ich verstehe, worauf Sie hinauswollen, aber nur um das klarzustellen: <nit-pick> In JavaScript gibt es keine unterschiedlichen numerischen Typen Integer und Float. Jede Zahl in JavaScript ist einfach eine Number . </nit-pick>

5 Stimmen

Ist Infinity eine ganze Zahl oder ein nicht ganzzahliger Wert? Die Antworten sind in dieser Hinsicht ziemlich gleichmäßig verteilt.

14 Stimmen

@MikeSamuel Um mathematisch genau zu sein: Da Unendlich keine reelle Zahl ist und alle ganzen Zahlen reelle Zahlen sind, Infinity kann nicht als ganze Zahl betrachtet werden.

5voto

Nachdem ich einige der Antworten hier ausprobiert habe, habe ich diese Lösung geschrieben. Dies funktioniert auch mit Zahlen innerhalb einer Zeichenkette.

function isInt(number) {
    if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
    return !(number - parseInt(number));
}

function isFloat(number) {
    if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
    return number - parseInt(number) ? true : false;
}

    var tests = {
        'integer' : 1,
        'float' : 1.1,
        'integerInString' : '5',
        'floatInString' : '5.5',
        'negativeInt' : -345,
        'negativeFloat' : -34.98,
        'negativeIntString' : '-45',
        'negativeFloatString' : '-23.09',
        'notValidFalse' : false,
        'notValidTrue' : true,
        'notValidString' : '45lorem',
        'notValidStringFloat' : '4.5lorem',
        'notValidNan' : NaN,
        'notValidObj' : {},
        'notValidArr' : [1,2],
    };

    function isInt(number) {
        if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
        return !(number - parseInt(number));
    }

    function isFloat(number) {
        if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
        return number - parseInt(number) ? true : false;
    }

    function testFunctions(obj) {
        var keys = Object.keys(obj);
        var values = Object.values(obj);

        values.forEach(function(element, index){
            console.log(`Is ${keys[index]} (${element}) var an integer? ${isInt(element)}`);
            console.log(`Is ${keys[index]} (${element}) var a float? ${isFloat(element)}`);
        });
    }

    testFunctions(tests);

5voto

!!(24%1) // false
!!(24.2%1) // true

5voto

Mike Mancini Punkte 49

Jede Fließkommazahl mit einem Dezimalteil von Null (z.B. 1.0, 12.00, 0.0) wird implizit in Integer umgewandelt, so dass es nicht möglich ist zu prüfen, ob es sich um eine Fließkommazahl handelt oder nicht.

4voto

gblazex Punkte 47453

Es hängt wirklich davon ab, was Sie erreichen wollen. Wenn Sie stark typisierte Sprachen "emulieren" wollen, dann schlage ich vor, dass Sie es nicht versuchen. Wie bereits erwähnt, haben alle Zahlen die gleiche Darstellung (den gleichen Typ).

Mit etwas wie Claudiu zur Verfügung gestellt:

isInteger( 1.0 ) -> wahr

was für den gesunden Menschenverstand gut aussieht, aber in etwas wie C würde man false

3voto

SpYk3HH Punkte 21870

Es muss wirklich nicht so kompliziert sein. Der numerische Wert der parseFloat()- und parseInt()-Äquivalente einer Ganzzahl ist derselbe. Sie können also wie folgt vorgehen:

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

Dann

if (isInt(x)) // do work

Dies ermöglicht auch die Überprüfung von Zeichenketten und ist daher nicht streng. Wenn Sie einen starken Typ Lösung (aka, wird nicht mit Zeichenfolgen arbeiten):

function is_int(value){ return !isNaN(parseInt(value * 1) }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X