2017-03-03 6 views
0

Warum gibt parseInt("-1000-500-75-33") zurück -1000?String To Number Confusion

Sollte es nicht die Summe dieser Zahlen zurück: -1608

Wie kann ich die Zeichenfolge "-1000-500-75-33" als die Summe dieser Zahlen zurückzukehren?

+0

'eval ("- 1000-500-75-33") toString()'.? – Hodrobond

+1

@Hodrobond, das hat funktioniert, danke! Wenn du das als Antwort postest, gebe ich dir Requisiten –

Antwort

3

parseInt versuchen, eine Nummer ab dem Anfang der Zeichenfolge zu erhalten.

Da ein gültiges Zeichen ist, mit dem eine Zahl beginnen soll, wird die Zeichenfolge analysiert, bis sie einen ungültigen Wert findet. Die zweite - ist ungültig, da keine Ganzzahl eine - darin enthalten kann, nur Ziffern. Es hört also auf und betrachtet die Nummer als "fertig".


Nun, wenn Sie zu Prozess wollen der Ausdruck, können Sie eval wie so verwenden:

eval("-1000-500-75-33") 

Diese -1608 kehrt wie erwartet.

0

Da sie in einer Zeichenfolge sind, analysiert ParseInt die gesamte Zeichenfolge nicht, findet nur die erste gültige Zahl von Anfang & gibt es zurück. Wenn der Anfang der Zeichenfolge nicht analysiert werden kann, gibt es NaN

parseInt("-1000NOT_NUMBER") = -1000 
parseInt("test-1000`) = NaN 

Sie haben eval Funktion verwenden, um zu tun, was Sie wollen, dass String angegeben auswertet, als ob es ein Befehl in die Konsole eingegeben wurden;

eval("-1000-500-75-33") = -1608 
0
console.log(eval("-1000-500-75-33").toString()); 

Und über Art Casting: Nach -1000 Parsen, die offensichtlich "1000 negativ" ist, wird es so schnell Gießen entkommen, da sie erkennen ein Symbol zwischen den Nummern & Strings. So parseInt sieht "-1000-500-75-33" als "-1000NotConvertableString", so verließ die verbleibenden entfernt, -1000 als Ergebnis der Typ-Casting.

1

parseInt führt keine Berechnungen durch, sondern versucht, eine Zeichenfolge in eine ganze Zahl zu konvertieren. Es gibt -1000 zurück, weil der Strich danach nicht als gültige Zahl betrachtet wird. Wenn Sie all diese Zahlen addieren mögen Sie auf dem Strich geteilt könnten, auf Nummer zuordnen, dann reduzieren:

var numString = "-1000-500-75-33"; 
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);