2017-06-03 1 views
0

Ich arbeite mit Swift Decimal Typ, versuchen zu gewährleisten, dass ein Benutzer String eine gültige Decimal ist.Warum ist Swift Decimal Returning Number aus String mit Buchstaben?

Ich habe zwei String Werte, die jeweils einen Buchstaben enthalten, innerhalb meiner Playground-Datei. Einer der Werte enthält einen Buchstaben am Anfang, während der andere einen Buchstaben am Ende enthält. Ich initialisiere einen Decimal mit jedem Wert, und nur eine Decimal Initialisierung schlägt fehl; Die Decimal initialisiert mit dem Wert, der den Buchstaben zu Beginn enthält.

Warum wird die Decimal initialisiert mit einem Wert, der einen Buchstaben am Ende enthält, eine gültige Decimal zurückgeben? Ich erwarte, dass nil zurückgegeben wird.

Beigefügt ist ein Screenshot aus meiner Playground-Datei.

Screenshot of code that produces a valid Decimal from a String with a trailing letter

Antwort

2

Es funktioniert so, weil Decimal alle Zahlenwerte vor den Buchstaben akzeptiert. Die Buchstaben fungieren als Terminator für alle Zahlen, die danach kommen. Also in Ihrem Beispiel:

12a = 12 (a is the terminator in position 3) 
a12 = nil (a is the terminator in position 1) 

Wenn beide wollen ungültig sein, wenn die Zeichenfolge einen Brief enthält dann könnte man Float stattdessen verwenden.

+0

Die einzige Ausnahme, die wirklich zu beachten ist, ist die Verwendung wissenschaftlicher Notation; das 'e +' wird die Zahl nicht beenden, zum Beispiel ('12.21e + 03') wäre eine gültige Zeichenfolge, die auf' 12210' gerundet würde ... –

Verwandte Themen