在iOS上的Objective-C中是否有一种方法可以将整数作为文本拼写出来?
例如,如果我有
NSInteger someNumber = 11242043;
我想知道一些函数,以便返回一个类似于“一千二百四十二万四千两千四十三”的字符串。
答案 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。