在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)
输出:两个
来自文档:
NSNumberFormatterSpellOutStyle
指定拼写格式; 例如,"23"变为"二十三".
适用于iOS 2.0及更高版本.
在NSNumberFormatter.h中声明.
由于您的问题不是非常具体,我也不会发布完整的代码源.
在 Swift 5 / iOS 12.2 中,NumberFormatter
有一个numberStyle
可以设置为 value的属性NumberFormatter.Style.spellOut
。spellOut
有以下声明:
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)
我们可以像这样快速地做到这一点.
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle. SpellOutStyle
println("\(identifier) \(formatter.stringFromNumber(1234.5678))")
Run Code Online (Sandbox Code Playgroud)
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)
归档时间: |
|
查看次数: |
8152 次 |
最近记录: |