with two decimals c objective-c cocoa formatting

with - double two decimals swift



Limite un doble a dos decimales (5)

Estoy bastante seguro de que [[NSNumber numberWithFloat: f] stringValue] hace exactamente lo que quiere.

¿Cómo logro la siguiente conversión de doble a una cadena?

1.4324 => "1.43" 9.4000 => "9.4" 43.000 => "43"

es decir, quiero redondear a las cifras decimales, pero no quiero ceros al final, es decir, no quiero

9.4 => "9.40" (wrong) 43.000 => "43.00" (wrong)

Entonces, este código que tengo ahora no funciona, ya que muestra ceros excesivos:

[NSString stringWithFormat: @"%.2f", total]



La forma más fácil es probablemente tirar la tuya. He tenido que hacer esto en C antes, ya que no hay forma de obtener el comportamiento que desea con el formato printf .

No parece ser mucho más fácil tampoco en Objective-C. Yo probaría esto:

NSString *ftotal = [NSString stringWithFormat: @"%.2f", total]; while ([ftotal hasSuffix:@"0"]) { ftotal = [ftotal subStringToIndex [ftotal length]-1]; } if ([ftotal hasSuffix:@"."]) { ftotal = [ftotal subStringToIndex [ftotal length]-1]; }

o esta variante (posiblemente más rápida):

NSString *ftotal = [NSString stringWithFormat: @"%.2f", total]; if ([ftotal hasSuffix:@".00"]) { ftotal = [ftotal subStringToIndex [ftotal length]-3]; } else { if ([ftotal hasSuffix:@"0"]) { ftotal = [ftotal subStringToIndex [ftotal length]-1]; } }

El stringWithFormat garantiza que siempre habrá un ".nn" al final (donde n es un carácter de dígito). El while y if simplemente quita los ceros finales y el decimal al final si se trata de un número entero.

Obviamente, es posible que desee colocarlo en una función o clase para que pueda acceder desde cualquier lugar sin tener que duplicar el código en cualquier lugar.


Cometiste un simple error. Esto funcionará:

[NSString stringWithFormat: @"%.2lf", total]


No estoy familiarizado con el objetivo C, pero esto no es posible con el formato estándar de estilo printf.

El uso de% g ordenaría el trabajo, pero para números grandes o pequeños utilizaría la notación científica (por ejemplo, 9.6e + 6, 4.2e-7) en lugar de la notación decimal.

Aquí se hizo la pregunta equivalente para C / C ++ , y en ese caso la respuesta es usar% f y luego quitar cualquier 0 final de la cadena. No exactamente elegante.