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.