separadores separador recorrer punto porcentagem number_format moneda miles mil formato cocoa string-formatting

cocoa - recorrer - La forma más fácil de formatear un número con miles de separadores en una NSString según la configuración regional



separador de miles angular (5)

El siguiente no aborda la configuración regional, pero es una forma mejor (en mi opinión) de configurar el separador de miles en el formateador de números.

NSNumberFormatter *numberFormat = [[[NSNumberFormatter alloc] init] autorelease]; numberFormat.usesGroupingSeparator = YES; numberFormat.groupingSeparator = @","; numberFormat.groupingSize = 3;

Parece que no puedo encontrar una manera fácil de hacerlo. Lo que necesito exactamente es:

[NSString stringWithFormat:@"%d doodads", n];

Donde n es un int. Así que para 1234 me gustaría esta cadena (en mi configuración regional):

@"1,234 doodads"

Gracias.


Para 10.6 esto funciona:

NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4]; [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; NSString *numberString = [numberFormatter stringFromNumber: [NSNumber numberWithInteger: i]];

Y se maneja adecuadamente la localización.


Recientemente he descubierto este one-liner:

[@1234567 descriptionWithLocale:[NSLocale currentLocale]]; // 1,234,567

O en Swift 2:

1234567.descriptionWithLocale(NSLocale.currentLocale()) // 1,234,567

Swift 3/4:

(1234567 as NSNumber).description(withLocale: Locale.current)

Formato por la pregunta:

[@(n) descriptionWithLocale:[NSLocale currentLocale]];

Formateado sin literales de Objective-C:

[[NSNumber numberWithInt:n] descriptionWithLocale:[NSLocale currentLocale]];

Esta es la solución que estaba buscando cuando hice la pregunta. Disponible desde iOS 2.0 y OS X 10.0, documentado para devolver una versión de cadena del número formateado según la configuración regional proporcionada. stringValue incluso está documentado para usar este método pero pasando nil .

Viendo que es mi pregunta y que encaja mejor con mi respuesta, estoy tentado de cambiar la garrapata, pero me parece cruel. Actualización he cambiado la marca, esta respuesta es la respuesta.


Todd Ransom respondió esto perfectamente.

Solo me gustaría agregar (en un comentario por separado, para poder mostrar un código bien formateado), que si planea hacer esto regularmente, vale la pena crear una clase de ayudante NSString.

Entonces, create un NSStringHelper.h que contenga esto:

#import <Foundation/Foundation.h> @interface NSString (NSStringHelper) +(NSString*)formatWithThousandSeparator:(NSInteger)number; @end

..y un archivo NSStringHelper.m que contiene esto:

#import "NSStringHelper.h" @implementation NSString (NSStringHelper) +(NSString*)formatWithThousandSeparator:(NSInteger)number { // Format a number with thousand seperators, eg: "12,345" NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setFormatterBehavior: NSNumberFormatterBehavior10_4]; [numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; NSString *result = [numberFormatter stringFromNumber:[NSNumber numberWithInteger:number]]; return result; } @end

Esto le brinda la manera perfecta de reutilizar este código en proyectos futuros.

#import "NSStringHelper.h" NSInteger numOfUsers = 12345; NSString* strNumberOfUsers = [NSString formatWithThousandSeparator:numOfUsers];

Cool, hey?

Una vez más, pido disculpas por volver a publicar la respuesta de Todd (¡que era exactamente lo que estaba buscando!), Pero esta es una excelente manera de resolver el problema y tenerla lista para usarla en sus futuros proyectos XCode.