Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSNumberFormatter with comma decimal separator

Tags:

I tried to convert an NSString like "12000.54" into "12.000,54". I wrote an NSNumberFormatter instance.

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

But when I NSLog this :

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

It prints null value. If I change my comma with a point it's working correctly. I just would like to be able to put what I want for my separators field (comma, point, slash, etc ...) and I have different outputs : 12/000,54 12.000.54 12,000,54 for example.

Do you know how I can handle this ?

like image 795
Pierre Avatar asked Apr 20 '13 17:04

Pierre


2 Answers

I would recommend not hardcoding the separator to ensure the right separator behavior based on the iPhone locale setting. The easiest way to to this is:

using 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 

using SWIFT 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 

and I would not use the var-name "numberFromString" because it is an NSNumberFormatter method. Good luck!

like image 175
JFS Avatar answered Oct 13 '22 01:10

JFS


So the question is valid : I'm answering it myself :)

I have a decimal value read from sqlite (e.g 12000 or 12000.54) directly transformed into NSString. I have to use different separator at some point in my code.

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 solved.

like image 44
Pierre Avatar answered Oct 13 '22 02:10

Pierre