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
Shubhendu Vaid 18 Apr. 2018 im 15:52

4 Antworten

Beste Antwort

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'))
10
Durga 18 Apr. 2018 im 13:14

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.

1
glm9637 18 Apr. 2018 im 12:57

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")
);
6
user3297291 18 Apr. 2018 im 13:09

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
1
Guilherme Lemmi 18 Apr. 2018 im 12:59