Подтвердить что ты не робот

Как преобразовать целое число в соответствующие слова в objective-c?

Есть ли способ в Objective-C на iOS, чтобы указать целое число в виде текста?

Например, если у меня есть

NSInteger someNumber = 11242043;

Я хотел бы знать некоторую функцию, чтобы вернуть строку, похожую на "одиннадцать миллионов двести сорок две тысячи сорок три".

4b9b3361

Ответ 1

Apple имеет множество удобных функций форматирования, встроенных для многих типов данных. Называется "форматтер", они могут преобразовывать объекты в/из строковых представлений.

В вашем случае вы будете использовать NSNumberFormatter, но если у вас есть целое число, вам нужно сначала преобразовать его в NSNumber. Смотрите ниже пример.

NSInteger anInt = 11242043;
NSString *wordNumber;

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

Если вы хотите узнать больше о форматерах: https://developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/Formatter.html

Ответ 2

Мощность расширения для Swift 3/4

import Foundation

public extension Int {
  public var asWord: String {
    let numberValue = NSNumber(value: self)
    var formatter = NumberFormatter()
    formatter.numberStyle = .spellOut
    return formatter.string(from: numberValue)!
  }
}


var value = 2
println("\(value.asWord)")

Вывод: два

Ответ 3

Из документов:

NSNumberFormatterSpellOutStyle

Определяет формат заклинания; например, "23" становится "двадцать три".

Доступен в iOS 2.0 и более поздних версиях.

Объявлено в NSNumberFormatter.h.

Поскольку ваш вопрос не очень конкретный, я не буду публиковать полноценный источник кода.

Ответ 4

Мы можем сделать это быстро, как это.

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

Ответ 5

Вы можете использовать приведенную ниже функцию, чтобы преобразовать целое число в слова, используя стиль swift native number.

func toWords<N>(number: N) -> String? {
    let formatter = NumberFormatter()
    formatter.numberStyle = .spellOut

    switch number {
    case is Int, is UInt, is Float, is Double:
        return formatter.string(from: number as! NSNumber)
    case is String:
        if let number = Double(number as! String) {
            return formatter.string(from: NSNumber(floatLiteral: number))
        }
    default:
        break
    }
    return nil
}

print(toWords(number: 12312))

print(toWords(number: "12312"))

Ответ 6

В Swift 5/iOS 12.2 NumberFormatter имеет свойство numberStyle которое можно установить со значением NumberFormatter.Style.spellOut. spellOut имеет следующую декларацию:

case spellOut = 5

Формат стиля, в котором числа прописаны на языке, определенном языковым стандартом форматера чисел.

Например, в локали en_US число 1234.5678 представлено как одна тысяча двести тридцать четыре целых пять шесть семь восемь; в локали fr_FR число 1234.5678 представлено как mille deuxcent trente-quatre virgule cinq шесть сентября.

Этот стиль поддерживается для большинства пользовательских локалей. Если этот стиль не поддерживает локаль средства форматирования чисел, локаль en_US используется как запасной вариант.


Приведенный ниже код игровой площадки показывает, как преобразовать целое число в текст с NumberFormatter spellOut стиля NumberFormatter spellOut:

import Foundation

let integer = 2018

let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.spellOut

let spellOutText = formatter.string(for: integer)!
print(spellOutText) // prints: two thousand eighteen

Ответ 7

Для моей справки это ответ @moca, но готов к использованию:

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

Примечание: используется ARC.