Formatting floats in Objective C Formatting floats in Objective C objective-c objective-c

Formatting floats in Objective C


Have you tried the %g format specifier?

NSLog([NSString stringWithFormat:@"%g, %g", 45.0, 45.5]);

2010-01-12 19:54:38.651 foo[89884:10b] 45, 45.5


The problem with %g is that it doesn't have a way to specify the rounding increment (at least, not that I can find).

You can use NSNumberFormatter like this to achieve your result with a number that has an undefined number of decimal places.

double none = 5;double one = 5.1;double two = 5.01;double lots = 5.918286558251858392107584219;NSNumber *numberNone = [NSNumber numberWithDouble:none];NSNumber *numberOne = [NSNumber numberWithDouble:one];NSNumber *numberTwo = [NSNumber numberWithDouble:two];NSNumber *numberLots = [NSNumber numberWithDouble:lots];NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];formatter.roundingIncrement = [NSNumber numberWithDouble:0.01];formatter.numberStyle = NSNumberFormatterDecimalStyle;NSLog(@"%@",[formatter stringFromNumber:numberNone]);NSLog(@"%@",[formatter stringFromNumber:numberOne]);NSLog(@"%@",[formatter stringFromNumber:numberTwo]);NSLog(@"%@",[formatter stringFromNumber:numberLots]);

Output:

2012-02-15 16:21:17.469 AwakeFromNib[53043:f803] 52012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.12012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.012012-02-15 16:21:17.471 AwakeFromNib[53043:f803] 5.92