2013-04-20 7 views
14

Ich habe versucht, eine NSString wie "12000.54" in "12.000.54" zu konvertieren. Ich habe eine NSNumberFormatter-Instanz geschrieben.NSNumberFormatter mit Komma-Dezimaltrennzeichen

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setGroupingSeparator:@"."]; 
[formatter setDecimalSeparator:@","]; 

Aber wenn ich NSLog dies:

NSLog(@"%@",[formatter stringFromNumber:[formatter numberFromString:value]]); 

Es Nullwert ausgibt. Wenn ich mein Komma mit einem Punkt ändere, funktioniert es richtig. Ich möchte nur in der Lage sein, was ich für mein Trennzeichen Feld (Komma, Punkt, Schrägstrich, etc ...) setzen möchte und ich habe verschiedene Ausgaben: 12/000,54 12.000.54 12.000,54 zum Beispiel.

Wissen Sie, wie ich damit umgehen kann?

+2

Vielleicht fand ich das Problem . Ich muss einen anderen NSFormatter verwenden, um meine numberFromString zuerst zu machen.Ich habe für das Schließen meines Beitrags gestimmt – Pierre

+2

Schließen Sie es nicht, geben Sie die Antwort selbst ein und überprüfen Sie es, andere werden das gleiche Problem in der Zukunft haben. –

+0

Mit @DavidH übereinstimmen. Die Frage ist gültig und vollständig mit Code und notwendigen Informationen. Ich bin eigentlich Upvoting :-) – LSerni

Antwort

20

Die Frage ist also gültig: Ich beantworte es selbst :)

Ich habe eine Dezimalzahl von SQLite-Lesewert (z 12000 oder 12.000,54) direkt in NSString umgewandelt. Ich muss irgendwann in meinem Code ein anderes Trennzeichen verwenden.

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setGroupingSeparator:@""]; 
[formatter setDecimalSeparator:@"."]; 

// Decimal values read from any db are always written with no grouping separator and a comma for decimal. 

NSNumber *numberFromString = [formatter numberFromString:@"12000.54"]]; 

[formatter setGroupingSeparator:@" "]; // Whatever you want here 
[formatter setDecimalSeparator:@","]; // Whatever you want here 

NSString *finalValue = [formatter stringFromNumber:numberFromString]; 

NSLog(@"%@",finalValue); // Print 12 000,54 

Problem gelöst.

+1

Sie können auch 'NSString's' doubleValue' Eigenschaft verwenden. – Kevin

37

Ich würde empfehlen, das Trennzeichen nicht hart zu codieren, um das richtige Trennzeichenverhalten basierend auf der iPhone Gebietsschemaeinstellung zu gewährleisten. Der einfachste Weg, um zu diesem ist:

mit Objective-C

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init]; 
numberFormatter.locale = [NSLocale currentLocale];// this ensures the right separator behavior 
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; 
numberFormatter.usesGroupingSeparator = YES; 

// example for writing the number object into a label 
cell.finalValueLabel.text = [NSString StringWithFormat:@"%@", [numberFormatter stringForObjectValue:numberFromString]]; // your var name is not well chosen 

SWIFT mit 3

let formatter = NumberFormatter() 
formatter.locale = NSLocale.current // this ensures the right separator behavior 
formatter.numberStyle = NumberFormatter.Style.decimal 
formatter.usesGroupingSeparator = true 

// example for writing the number object into a label 
// your variable "numberFromString" needs to be a NSNumber object 
finalValueLabel.text = formatter.string(from: numberFromString)! // your var name is not well chosen 

und ich würde nicht die var-name "numberFromString" verwenden, weil Es ist eine NSNumberFormatter Methode. Viel Glück!

+0

Super Antwort, danke – Mutawe

3
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
numberFormatter.usesGroupingSeparator = YES; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setMinimumFractionDigits:2]; 
NSString *formattedNumberString = [numberFormatter stringFromNumber:@122344.00];` 

Dieses wll beheben Sie Ihre Rundung Problem, wenn Sie mit Dezimalpunkten beschäftigen.

6

Die einfachste Lösung, die ich vor kurzem ist gefunden:

NSString *localizedString = [NSString localizedStringWithFormat:@"%@", @1234567]; 

arbeitet auch Ints mit:

NSString *localizedString = [NSString localizedStringWithFormat:@"%d", 1234567]; 

in Spielplatz 6 Xcode bestätigt. Aber Dokumente sagen, dass diese Funktion schon immer existiert hat.

+0

einfache Antwort funktioniert ..! –

0

Für die Währungs Verwendung ...

let numberFormatter = NumberFormatter() 

// Produces symbol (i.e. "$ " for en_US_POSIX) and decimal formatting 
numberFormatter.numberStyle = .currency 

// Produces commas; i.e. "1,234" 
numberFormatter.usesGroupingSeparator = true 
numberFormatter.groupingSize = 3 

Beispiel Nutzung:

let value: Double = 12345.6789 
numberFormatter.string(from: value as NSNumber) 

Ausbeuten ...

"$ 12,345.68" 

als ein

erwarten