5

He encontrado% g para mostrar solo decimales si es necesario. Si el número es completo, no se agrega .000 final, así que eso es bueno. Pero en el caso de, por ejemplo, 1.12345, quiero que acorte la respuesta a 1.123. Y en el caso de 1,000 solo quiero mostrar 1, como% g ya lo hace.¿Utiliza correctamente el especificador de formato para mostrar hasta tres decimales si es necesario, de lo contrario, cero decimales?

He intentado especificar% .3g en la cadena, pero eso no funciona. Si alguien tiene la respuesta, ¡le estaría agradecido!

Respuesta

2

¿Qué obtienes por NSLog (@ "%. 3g", 1.12345)?

Hice algunas pruebas y entiendo su pregunta que está en el camino correcto. Estos son mis resultados:

NSLog(@"%g", 1.000000); => 1 
NSLog(@"%g", 1.123456789); => 1.12346 
NSLog(@"%.1g", 1.123456789); => 1 
NSLog(@"%.2g", 1.123456789); => 1.1 
NSLog(@"%.3g", 1.123456789); => 1.12 
NSLog(@"%.4g", 1.123456789); => 1.123 

para conseguir lo que desea utilizar @ "% 4g.".

+1

Gracias por su respuesta, pero todavía no está funcionando correctamente. –

+1

% .3g no mostrará números semi grandes, como 100 000. Eso se imprime como 1E + 05, lo que no es ideal: D % .3f parece ajustarse mejor, pero eso siempre deja los ceros al llegar a un número entero ? .. :( –

+0

¿Cómo puedo obtener 123456.1234 impreso como 123.456,12, , así como 123.456,00 impresa como 123456 dos decimales, sólo cuando sea necesario .. –

11

Revisé las capacidades de una "cadena de formato" a través del IEEE Specification y como lo entiendo, su comportamiento deseado no es posible.

Te recomiendo que utilices la clase NSNumberFormatter. Escribí un ejemplo que coincide con tu comportamiento deseado. Espero que ayude:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setDecimalSeparator:@"."]; 
[numberFormatter setGroupingSeparator:@""]; 
NSString *example1 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.1234]]; 
NSLog(@"%@", example1); 
NSString *example2 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.00]]; 
NSLog(@"%@", example2); 
+0

ene Weinkauff -? Gracias tanto increíble que haya gente por ahí como! ¡usted, dispuesto a usar su propio tiempo para encontrar respuestas para los demás! –

+0

+1 para investigar las Especificaciones IEEE. Trooper. –

0

Aquí está la solución de Jan como Swift 4:

let numberFormatter = NumberFormatter() 
numberFormatter.numberStyle = .decimal 
numberFormatter.maximumFractionDigits = 2 
numberFormatter.decimalSeparator = "." 
numberFormatter.groupingSeparator = "" 
let example1 = numberFormatter.string(from: 123456.1234)! 
print(example1) 
let example2 = numberFormatter.string(from: 123456.00)! 
print(example2) 
Cuestiones relacionadas