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.

8voto

akshay bagade Punkte 999

Wir können prüfen, indem wir isInteger Funktion. d.h. number gibt true zurück und float gibt false zurück

console.log(Number.isInteger(2)),<BR>

Wird true zurückgegeben

console.log(Number.isInteger(2.5))

Gibt false zurück

7voto

Claudiu Punkte 215027

Wie bereits erwähnt, gibt es in JS nur Doppelgänger. Wie definieren Sie also, dass eine Zahl eine ganze Zahl ist? Prüfen Sie einfach, ob die gerundete Zahl gleich sich selbst ist:

function isInteger(f) {
    return typeof(f)==="number" && Math.round(f) == f;
}
function isFloat(f) { return typeof(f)==="number" && !isInteger(f); }

6voto

Arman Punkte 4746

Das verwende ich für ganze Zahlen:

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

Kurz und gut :) Funktioniert die ganze Zeit. Dies ist, was David Flanagan vorschlägt, wenn ich mich nicht irre.

6voto

dkellner Punkte 6779

Einfacher Integer-Test:

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

Macht Sinn: wenn JavaScript kann etwas in eine ganze Zahl zu konvertieren, und durch die Umwandlung wird es genau die gleiche Sache, dann Ihr Operand war eine ganze Zahl.

Testfälle für die Konsole:

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!

Das verwirrt viele Menschen. Immer wenn etwas 0 ist, ist es kein Float mehr. Es ist eine ganze Zahl. Oder man kann es einfach "ein numerisches Ding" nennen, denn es gibt keine strikte Unterscheidung wie damals in C. Gute alte Zeiten.

Alles, was Sie also tun können, ist, die Tatsache, dass 1,000 eine ganze Zahl ist, zu akzeptieren.

Interessante Randnotiz

Es wurde eine Bemerkung über große Zahlen gemacht. Riesige Zahlen stellen für diesen Ansatz KEIN Problem dar; wenn parseInt nicht in der Lage ist, die Zahl zu verarbeiten (weil sie zu groß ist), gibt es etwas anderes zurück als den tatsächlichen Wert, so dass der Test FALSE zurückgibt. Sehen Sie:

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);

Ich habe dies 2014 im IE8 und 2021 in Chrome getestet, beide geben "a ist ok; b schlägt fehl" zurück, was bedeutet, dass eine Zahl, die zu groß ist, keine ganze Zahl mehr sein kann.

20 Ziffern sollten für jeden reichen , um einen Klassiker zu zitieren.

5voto

ankr Punkte 638
var isInt = function (n) { return n === (n | 0); };

Es gab noch keinen Fall, in dem das nicht funktioniert hat.

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