2017-05-12 4 views
1

I String precent Wert in Double durch drehen wollen:NumberFormatter Prozent Wert drehen zu verdoppeln bekommen null

 let formatter = NumberFormatter() 
     formatter.numberStyle = .percent 
     let a = formatter.number(from: "12.5%") 
     print(a) 

Es funktioniert gut in Spielplatz. Aber wenn Sie im Projekt unter "romana" (Română) Sprache testen, druckt es nil. Wenn ich 12,5% in int-Typ Prozentwert wie 56% ändern, funktioniert es kein Problem.

Irgendeine Idee?

Die Spracheinstellungsseite angehängt. enter image description here

Antwort

1

Versuchen Sie, diese

let formatter = NumberFormatter() 
formatter.numberStyle = .percent 
formatter.locale = Locale(identifier: "EN") 
let a = formatter.number(from: "12.5%") 
4

Wenn i 12,5% ändern Typ Prozentwert wie 56% auf int funktioniert es kein Problem.

Dies bedeutet normalerweise, dass die lokalen Einstellungen einen anderen Charakter für Dezimalzeichen, d.h. comma , anstelle von Punkt .

Umschalten auf 12,5% sollte, dieses Problem zu beheben.

I mit . Separator

alle Quellennummer bekam Wenn Ihre Zahlen hartcodiert in der Quelle sind, verlassen Sie sich nicht auf vom Benutzer ausgewählten locale. Verwenden system locale für den Umgang mit Eingängen hart codiert:

formatter.locale = Locale.system 

[Locale.system sind], um die generischen locale, die festen „Backstop“ Einstellungen enthält, die Werte für die ansonsten nicht definierten Tasten bereitzustellen. Verwenden Sie das Systemgebietsschema, wenn Sie keine Lokalisierungen möchten.

+0

Es funktioniert. Ich habe deine Antwort erneuert. Ich denke, die akzeptierte Antwort ist besser. Vielen Dank! –

+2

@WilliamHu Das Problem mit der akzeptierten Antwort ist, dass es den Zweck von Locales besiegt, indem es ausländische Nummerierungskonventionen für rumänische Endbenutzer erzwingt: Sie werden keine Ahnung haben, warum Ihr Programm keine vollkommen legale "12,5%" einnimmt. – dasblinkenlight

+0

Danke. Sie wissen, dass ich die ganze Quellennummer mit '' '.''' Trennzeichen bekommen habe. Ich denke, du meinst, ich sollte das '.' Zu '' '' '' 'in der Zeichenfolge zuerst ersetzen. Dann in Doppel konvertieren? Aber wenn es so ist, mache ich mir Sorgen, wenn andere Sprachen andere Trennzeichen verwenden. Ich kann eins nach dem anderen ersetzen? Was denken Sie? Ich stimme deinen Gedanken zu. Aber um mein Problem zu lösen, habe ich diese Antwort gewählt. :) Auch realisiert, wenn diese '' 'formatter.decimalSeparator =". "' '' Es funktioniert auch. –