Ich suche nach einer einfachen Möglichkeit in JavaScript zu überprüfen, ob eine Zahl eine Dezimalstelle enthält (um festzustellen, ob es sich um eine Ganzzahl handelt). Zum Beispiel,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
20.0
programmgesteuert ein Dezimalpunkt vorhanden ist, es sei denn, er wird als Zeichenfolge ausgedrückt. Auch keine der anderen Lösungen wurde"10."
ist eine ganze Zahl und das Ergebnis ist genau das gleiche wie"10"
oder10
.Number.isInteger () ist Teil des ES6-Standards und wird in IE11 nicht unterstützt.
Es gibt false zurück , für
NaN
,Infinity
und nicht-numerische Argumente währendx % 1 != 0
gibt true zurück.quelle
Number.isInteger(12.0)
kehrt zurücktrue
.Number.isInteger('1e3')
ist esfalse
, obwohlNumber.isInteger(1e3)
es wahr ist. Unter der Annahme die Absicht der Frage ist , nicht-ganzzahlige Werte ( und nicht die tatsächliche Anwesenheit eines Dezimalpunktes in der Darstellung) zu finden, dann wird der String - Wert '12 .0' sollte passieren , da es eine ganze Zahl darstellt, aber auch hierNumber.isInteger('12.0')
istfalse
.number
ganz ist oder nicht. Wenn Ihre Eingabe eine Zeichenfolge ist, müssen Sie sie natürlich in einenumber
erste konvertieren, z. B. viaparseFloat()
.Oder Sie können dies einfach verwenden, um herauszufinden, ob es sich NICHT um eine Dezimalstelle handelt:
quelle
yournumber.toString.indexOf(".")
Die gebräuchlichste Lösung besteht darin, den ganzzahligen Teil der Zahl zu entfernen und ihn wie folgt mit Null zu vergleichen:
quelle
startVal != Math.floor(startVal)
?Math.Floor
Funktion nimmt einen Dezimalwert an und der größte in JavaScript zulässige Dezimalwert ist2^53 - 1
oder9007199254740991
. Da893144042145698745.3
größer als dieses Maximum ist, schlägt die Funktion fehl.Einfach aber effektiv!
quelle
Math.floor(3.0) == 3.0
ist wahr,Math.floor(3.3) == 3.3
ist falsch// Wie wäre es damit, es zu byten?
Ich fühle mich immer schlecht für Bitoperatoren in Javascript-
Sie bekommen kaum Bewegung.
quelle
>>
der Wert in eine vorzeichenbehaftete 32-Bit-Ganzzahl konvertiert wird .Ziemlich cool und funktioniert auch für Dinge wie XX.0! Es funktioniert, weil Math.floor () jede Dezimalstelle abschneidet, wenn es eine hat. Wenn sich also der Boden von der ursprünglichen Zahl unterscheidet, wissen wir, dass es sich um eine Dezimalzahl handelt! Und keine String-Konvertierungen :)
quelle
quelle
num= 999999999999999999999
.Number.isInteger()
ist wahrscheinlich die prägnanteste. Es gibt true zurück, wenn es sich um eine Ganzzahl handelt, und false, wenn dies nicht der Fall ist.quelle
quelle
Wenn eine Nummer übergeben wird, wird
parseInt()
die Nummer einfach als int zurückgegeben:quelle
parseInt(3.0) === 3.0 // true
Konvertieren Sie die Zeichenfolge in ein Array, geteilt durch den Dezimalpunkt. Wenn das Array nur einen Wert hat, bedeutet dies, dass die Zeichenfolge keine Dezimalstelle enthält.
Auf diese Weise können Sie auch die Ganzzahl und die Dezimalzahl ermitteln. Ein fortgeschritteneres Beispiel wäre.
quelle
Hier ist ein Auszug aus meiner Wachbibliothek (inspiriert von Effective JavaScript von David Herman):
quelle
Sie können es mit 10 multiplizieren und dann eine " Modulo " -Operation / Division mit 10 durchführen und prüfen, ob das Ergebnis dieser beiden Operationen Null ist. Das Ergebnis dieser beiden Operationen gibt Ihnen die erste Ziffer nach dem Dezimalpunkt. Wenn das Ergebnis gleich Null ist, ist die Zahl eine ganze Zahl.
quelle
quelle
Sie können die bitweisen Operationen verwenden, die den Wert (
^ 0
oder~~
) nicht ändern , um den Dezimalteil zu verwerfen, der zum Runden verwendet werden kann. Nach dem Runden der Zahl wird sie mit dem ursprünglichen Wert verglichen:quelle
quelle
Mit der folgenden Funktion können Sie überprüfen, ob eine Zahl Dezimalstellen hat:
Anscheinend wollen einige Benutzer Erklärungen. Ich werde es in Stücke zerbrechen: (num% 1)
Klammern bedeuten, dass diese Operationen zuerst ausgeführt werden. num - eine von der Funktion übergebene Variable. % - ein Modul-Symbol, das versucht, die linke Zahl durch die rechte zu teilen. Wenn es einen Rest gibt, wird dieser als Dezimalzahl zurückgegeben. Wenn es sich gleichmäßig teilt, gibt es 0 zurück.
Fassen Sie also zusammen, was wir bisher haben. (Num% 1) wird zurückkehren:
0 bei gleichmäßiger Aufteilung ODER #. ##### wenn nicht
0 == false.
[ANY_NUMBER_NOT_ZERO] == true.
Beispiele: new Boolean (0) ist false new boolean (12312.1231) ist true
Andere Alternativen: Ein Benutzer hätte versuchen können, den Wert von (num% 1) zurückzugeben, wodurch im Grunde dasselbe erreicht würde. Da return (0) falsch ist und return (1.213113) wahr ist.
Aber ich wollte einen booleschen Wert zurückgeben. Als Verknüpfung zum Erzwingen eines Werts in einen Booleschen Wert habe ich ein! Symbol davor.
So viele wie wissen.! bedeutet NICHT. Es erzwingt aber auch einen Wert in einen Booleschen Wert.
Seit der ! symobol erzwingt den Wert in einen Booleschen Wert und kehrt seinen Wert um. Ich benutze !! um den Wert in einen Booleschen Wert zu zwingen und seinen Wert wieder in seinen ursprünglichen Booleschen Wert umzukehren.
quelle
Funktion für Schecknummer ist Dezimalzahl oder ganze Zahl
quelle
Vielleicht funktioniert das bei Ihnen?
Es verwendet Regex, um zu überprüfen, ob die Zahl ein Komma enthält. Wenn dies nicht der Fall ist, werden Komma und Streifen hinzugefügt.
quelle
Verwenden Sie Folgendes, wenn der Wert Zeichenfolge ist (z. B. von
<input
):Ich füge
.toString()
dem Boden hinzu, damit es auch in Fällen funktioniert, in denenvalue == "1."
(mit einem Dezimaltrennzeichen oder einer anderen Zeichenfolge endet). Gibt auchMath.floor
immer einen Wert zurück,.toString()
schlägt also nie fehl.quelle