objective-c string cocoa formatting floating-point

Formateo de flotantes en Objective C



objective-c string (4)

¿Has probado el especificador de formato %g ?

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

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

Necesito formatear un flotante (título pegadizo, él?) A 2 lugares decimales, pero solo si esos lugares decimales tienen valores que no son cero. Ejemplo:

Tengo un NSTextField llamado ''respuesta'', después de hacer algunas matemáticas con un par de flotantes, quiero asignar mi variable ''answerFloat'' a la ''respuesta'' NSTextField. Hasta ahora tengo:

[answer setStringValue:[NSString stringWithFormat:@"%.2f", answerFloat]];

Pero eso establece algo así como 45 a 45.00. Quiero que se muestren los números enteros sin los ceros y los números decimales que se mostrarán con sus respectivos valores decimales.

¿Debo ejecutar algún tipo de comprobación antes de dársela a stringWithFormat? ¿O NSString ofrece una forma de manejar esto?


Busque NSNumberFormatter.


El problema con% g es que no tiene una forma de especificar el incremento de redondeo (al menos, no que yo pueda encontrar).

Puede usar NSNumberFormatter de esta manera para lograr su resultado con un número que tenga un número indefinido de decimales.

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]);

Salida:

2012-02-15 16:21:17.469 AwakeFromNib[53043:f803] 5 2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.1 2012-02-15 16:21:17.470 AwakeFromNib[53043:f803] 5.01 2012-02-15 16:21:17.471 AwakeFromNib[53043:f803] 5.92