Warum gibt parseFloat() immer NaN zurück?
ebody
- javascript
2 Christian Kruse0 Tabellenkalk0 ebody
Hallo,
warum gibt parseFloat() immer NaN zurück?
$( document ).ready(function() {
var obj = {
"arr":[
{
"int1" : "84.944403573305308",
"int2" : "96.13809774040988"
}
]
}
$('#result1 > span').text(parseFloat("84.944403573305308"));
$('#result2 > span').text(parseFloat(obj.arr[0].int1));
$('#result3 > span').text(parseFloat(obj.arr[0].int2));
$('#result4 > span').text(parseFloat("96.13809774040988"));
$('#result5 > span').text(parseFloat("96.138097"));
});
https://codepen.io/ebody/pen/PowgZxb?editors=1010
Gruß ebody
Hallo ebody,
warum gibt parseFloat() immer NaN zurück?
weil dein Quelltext unsichtbare Zeichen enthält, in diesem Fall U+202D, Left-To-Right Override. Direkt hinter dem öffnenden "
.
Freundliche Grüße,
Christian Kruse
Hallo,
weil den Quelltext unsichtbare Zeichen enthält, in diesem Fall U+202D, Left-To-Right Override. Direkt hinter dem öffnenden
"
.
ich hatte auch (zufällig) entdeckt, dass es an den " liegt. Wie kommt man auf unsichtbare Zeichen und überhaupt, wie kommen die dahin?
Gruß
Kalk
Hallo Tabellenkalk,
Wie kommt man auf unsichtbare Zeichen […]
Erfahrung. Wenn man mal zwei, drei mal darüber gestolpert ist, dann denkt man sofort daran das zu überprüfen.
und überhaupt, wie kommen die dahin?
Das kann in diesen Fall nur ebody beantworten, aber meine Erfahrung sagt: durch Copy&Paste aus externen, dritten Quellen ist die häufigste Ursache.
Freundliche Grüße,
Christian Kruse
Hatte ich auch schon ein, zweimal und zwar in Mail-Adressen. Die kann man damit ungültig machen, und du suchst dir einen Wolf.
In meinem Editor Geany „hängt” die Textmarke an der betreffenden Stelle, wenn man mit den Cursor-Tasten den String abfährt.
weil den Quelltext unsichtbare Zeichen enthält, in diesem Fall U+202D, Left-To-Right Override. Direkt hinter dem öffnenden
"
.
Danke, daran liegt es. Hier habe ich die Zahl mit " ganz neu eingetippt und es funktioniert.
$('#result1 > span').text(parseFloat("84.944403573305308"));
Ich hatte sie zuvor mit Copy/Paste eingefügt.
Wie hast du die unsichtbaren Zeichen denn gefunden? Weil ich hatte sie zuvor auch schon mal in Notepad++ überprüft. "Ansicht" > "Nicht druckbare Zeichen" > "Alle anzeigen", da wurde aber nichts angezeigt.
Gruß ebody
Hallo ebody,
Wie hast du die unsichtbaren Zeichen denn gefunden? Weil ich hatte sie zuvor auch schon mal in Notepad++ überprüft. "Ansicht" > "Nicht druckbare Zeichen" > "Alle anzeigen", da wurde aber nichts angezeigt.
Ich habe den String kopiert und mir eine Liste der Codepoints ausgeben lassen:
console.log(Array.from("84.944403573305308").map(c => [c, c.charCodeAt(0)]));
Von Notepad++ habe ich keine Ahnung, dazu kann ich nichts sagen.
Freundliche Grüße,
Christian Kruse
Vielen Dank, werde ich mir merken :-)
Gruß ebody
Hallo Christian Kruse,
console.log(Array.from("84.944403573305308").map(c => [c, c.charCodeAt(0)]));
Alternativ geht auch https://www.fontspace.com/unicode/analyzer/?q=("84.944403573305308"))%3B
Bis demnächst
Matthias
Hallo Matthias,
Alternativ geht auch https://www.fontspace.com/unicode/analyzer/?q=("84.944403573305308"))%3B
Nettes Tool. Kannte ich noch nicht. 👍
Freundliche Grüße,
Christian Kruse
Hallo Christian
Ich habe den String kopiert und mir eine Liste der Codepoints ausgeben lassen:
console.log(Array.from("84.944403573305308").map(c => [c, c.charCodeAt(0)]));
Nur zur Info, die Methode Array.from
hat eine Mapfunktion bereits eingebaut, das heißt, du hättest die Callbackfunktion auch direkt übergeben können:
console.log(Array.from("84.944403573305308", c => [c, c.charCodeAt(0)]));
Wahrscheinlich sind aktuelle Ausführungsumgebungen clever genug, um zu erkennen, dass bei so einem Ausdruck nur ein Array erzeugt werden muss, also wird es am Ende auf dasselbe hinauslaufen. Wenn mehr Arbeit zu verrichten wäre als in diesem Beispiel, würde ich es aber vermutlich nicht darauf ankommen lassen wollen. Außerdem ist der Code ein wenig kürzer.
Viele Grüße
Hallo ebody,
Wie hast du die unsichtbaren Zeichen denn gefunden? Weil ich hatte sie zuvor auch schon mal in Notepad++ überprüft. "Ansicht" > "Nicht druckbare Zeichen" > "Alle anzeigen", da wurde aber nichts angezeigt.
Ich habe es mal mit Notepad++ ausprobiert:
Zum einen hängt, wie von Linuchs beschrieben der Cursor zwischen dem Leerzeichen und der 8.
Zum anderen gibt es für NPP einen Hex-Viewer als Plugin (offiziell leider nur für die 32-Bit-Variante). Mit dem kann man die unsichtbaren Zeichen sehen.
Gruß
Patrick
Ich habe es mal mit Notepad++ ausprobiert:
Zum einen hängt, wie von Linuchs beschrieben der Cursor zwischen dem Leerzeichen und der 8.
Sorry, meinte natürlich das Anführungszeichen.
Hallo,
eine weitere Methode: Kodierung -> ANSI
Gruß
Patrick