Comment puis-je convertir un entier en mots correspondants dans l'objective-c?

Existe-t-il un moyen dans Objective-C sur iOS d'épeler un integer en tant que text?

Par exemple, si j'ai

NSInteger someNumber = 11242043; 

Je voudrais savoir une fonction de sorte que renverrait une string semblable à "onze millions deux cent quarante deux mille quarante trois".

Apple a beaucoup de fonctionnalités de formatting pratiques embeddedes pour de nombreux types de données. Appelé un "formateur", ils peuvent convertir des objects en / depuis des représentations de strings.

Pour votre cas, vous utiliserez NSNumberFormatter, mais si vous avez un entier, vous devez d'abord le convertir en NSNumber. Voir ci-dessous l'exemple.

 NSInteger anInt = 11242043; NSSsortingng *wordNumber; //convert to words NSNumber *numberValue = [NSNumber numberWithInt:anInt]; //needs to be NSNumber! NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterSpellOutStyle]; wordNumber = [numberFormatter ssortingngFromNumber:numberValue]; NSLog(@"Answer: %@", wordNumber); // Answer: eleven million two hundred forty-two thousand forty-three 

Si vous souhaitez en savoir plus sur les formateurs: https://developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/Formatter.html

De la docs:

NSNumberFormatterSpellOutStyle

Spécifie un format d'orthographe par exemple, "23" devient "vingt-trois".

Disponible dans iOS 2.0 et versions ultérieures.

Déclaré dans NSNumberFormatter.h.

Comme votre question n'est pas très spécifique, je ne publierai pas non plus de source de code à part entière.

Puissance d'extension pour Swift 3/4

 import Foundation public extension Int { public var asWord: Ssortingng { let numberValue = NSNumber(value: self) var formatter = NumberFormatter() formatter.numberStyle = .spellOut return formatter.ssortingng(from: numberValue)! } } var value = 2 println("\(value.asWord)") 

Sortie: deux

Nous pouvons le faire rapidement comme ça.

  let formatter = NSNumberFormatter() formatter.numberStyle = NSNumberFormatterStyle. SpellOutStyle println("\(identifier) \(formatter.ssortingngFromNumber(1234.5678))") 

Vous pouvez utiliser la fonction ci-dessous pour convertir un integer en mots en utilisant le style numérique natif rapide.

 func toWords<N>(number: N) -> Ssortingng? { let formatter = NumberFormatter() formatter.numberStyle = .spellOut switch number { case is Int, is UInt, is Float, is Double: return formatter.ssortingng(from: number as! NSNumber) case is Ssortingng: if let number = Double(number as! Ssortingng) { return formatter.ssortingng(from: NSNumber(floatLiteral: number)) } default: break } return nil } print(toWords(number: 12312)) print(toWords(number: "12312")) 

Pour ma propre reference, c'est la réponse de @ moca, mais prêt à l'emploi:

 - (NSSsortingng *) spellInt:(int)number { NSNumber *numberAsNumber = [NSNumber numberWithInt:number]; NSNumberFormatter *formatter = [NSNumberFormatter new]; [formatter setNumberStyle:NSNumberFormatterSpellOutStyle]; return [formatter ssortingngFromNumber:numberAsNumber]; } 

Remarque: Ceci utilise ARC.