Ich kann das nicht verstehen:
parseFloat('1/2') == 1 Not Expected
parseFloat(1/2) == 0.5 Expected
parseFloat('0.5') == 0.5 Expected
parseFloat(0.5) == 0.5 Expected
Ist es ein Problem oder mache ich etwas falsch? Auch wie man bekommt
parseFloat('1/2') == 0.5
4 Antworten
Wie in Dokument parseFloat erwähnt
parseFloat analysiert sein Argument und gibt eine Gleitkommazahl zurück. Wenn es auf ein anderes Zeichen als ein Zeichen (+ oder -), eine Ziffer (0-9), einen Dezimalpunkt oder einen Exponenten trifft, gibt es den Wert bis zu diesem Punkt zurück und ignoriert dieses Zeichen und alle nachfolgenden Zeichen. Führende und nachfolgende Leerzeichen sind zulässig.
Also wird 1/2
als Zeichenfolge behandelt. und es analysiert nur 1
. Und ignoriert Ruhe.
Sie können eval verwenden, um die Bruchform zu berechnen .
console.log(eval('2/3'))
Nicht 100% sicher. Wenn Sie jedoch ein wenig mit parseFloat herumspielen, werden Sie feststellen, dass es versucht, jede gefundene Zahl in einen Float umzuwandeln, aber stoppt, sobald ein unerwarteter Wert vorliegt.
parseFloat('1/asdf') == 1
Aber
parseFloat('0.5') == 0.5
Parse float berechnet also nicht für Sie, sondern analysiert nur jede gefundene Zahl, bis es etwas gibt, das nicht numerisch ist.
parseFloat
versteht das Zeichen /
weder als Division noch als eval
der Zeichenfolgeneingabe.
Es hört einfach auf zu suchen, wenn es auf den Charakter trifft, den es nicht versteht, und gibt den korrekt analysierten ersten Teil zurück:
console.log(
parseFloat("1/2"), // 1
parseFloat("3/2"), // 3
parseFloat("1kahsdjfjhksd2") // 1
)
Wenn Sie die Zeichenfolge "1/2"
mit der Zahl 0.5
auswerten möchten, können Sie eval
verwenden. Seien Sie vorsichtig, denn die Verwendung von eval
kann eine Sicherheitsrisiko, langsam und schwer zu debuggen.
console.log(
eval("1/2")
);
Sie analysieren eine Zeichenfolge, die in 1 konvertiert wird. Wenn Ihre Zeichenfolge nur aus Zahlen (z. B. "0,5") besteht, werden diese korrekt konvertiert. Da sie jedoch das '/' enthält, wird die automatische Typkonvertierung nicht durchgeführt und bleibt bestehen als Zeichenfolge. Bei Verwendung von Zahlen tritt das erwartete Verhalten auf, dh:
parseFloat(1/2) === 0.5 // true