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

时间:2012-02-12 16:29:22

标签: objective-c ios

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

例如,如果我有

NSInteger someNumber = 11242043;

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

7 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:21)

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)")

输出: 2

答案 2 :(得分:9)

来自文档:

  

NSNumberFormatterSpellOutStyle

     

指定拼写格式;例如,“23”变为“二十三”。

     

适用于iOS 2.0及更高版本。

     

在NSNumberFormatter.h中声明。

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

答案 3 :(得分:5)

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

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

答案 4 :(得分:4)

您可以使用以下函数将整数转换为使用swift本机数字样式的单词。

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"))

答案 5 :(得分:2)

使用Swift 4和iOS 11,NumberFormatter具有numberStyle属性,可以使用值NumberFormatter.Style.spellOut进行设置。 spellOut有以下声明:

case spellOut = 5
  

一种样式格式,其中数字以数字格式化程序区域设置定义的语言拼写出来。

  

例如,在en_US语言环境中,数字1234.5678表示为一千二百三十四点五六七八;在fr_FR语言环境中,数字1234.5678表示为mille deux cent trente-quatre virgule cinq six 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

答案 6 :(得分:1)

我自己参考,这是@ moca的答案,但随时可以使用:

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

注意:这是使用ARC。