如何将整数转换为objective-c中的相应单词?

cab*_*gef 23 objective-c ios

在iOS上的Objective-C中是否有一种方法可以将整数作为文本拼出?

例如,如果我有

NSInteger someNumber = 11242043;
Run Code Online (Sandbox Code Playgroud)

我想知道一些函数,以便返回一个类似于"一千二百四十二万四千二百四十三"的字符串.

小智 56

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
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关格式化程序的更多信息,请访问:https: //developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/Formatter.html


Muh*_*Ali 22

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)")
Run Code Online (Sandbox Code Playgroud)

输出:两个


Cyr*_*lle 9

来自文档:

NSNumberFormatterSpellOutStyle

指定拼写格式; 例如,"23"变为"二十三".

适用于iOS 2.0及更高版本.

在NSNumberFormatter.h中声明.

由于您的问题不是非常具体,我也不会发布完整的代码源.


Ima*_*tit 8

在 Swift 5 / iOS 12.2 中,NumberFormatter有一个numberStyle可以设置为 value的属性NumberFormatter.Style.spellOutspellOut有以下声明:

case spellOut = 5
Run Code Online (Sandbox Code Playgroud)

一种样式格式,其中以数字格式化程序语言环境定义的语言拼写数字。

例如,在 en_US 语言环境中,数字 1234.5678 表示为一千二百三十四点五六七八;在fr_FR 语言环境中,数字1234.5678 表示为mille deux cent trente-quatre virgule cinq sept 6 sept huit。

大多数用户语言环境都支持此样式。如果此样式不支持数字格式化程序语言环境,则使用 en_US 语言环境作为后备。


下面的 Playground 代码显示了如何使用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
Run Code Online (Sandbox Code Playgroud)


iGo*_*iGo 5

我们可以像这样快速地做到这一点.

   let formatter = NSNumberFormatter()
   formatter.numberStyle = NSNumberFormatterStyle. SpellOutStyle
   println("\(identifier) \(formatter.stringFromNumber(1234.5678))")
Run Code Online (Sandbox Code Playgroud)


Par*_*oja 5

You can use the below function to convert an integer to words using swift native number style.

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"))
Run Code Online (Sandbox Code Playgroud)