2016-05-09 59 views
2

我正在尝试为我的iOS应用程序创建有意义的辅助功能标签,并打击我认为是NSNumberFormatter的一个奇怪问题/限制。使用NSNumberFormatter限制小数位数SpellOutStyle

import UIKit 

let decimal = 171.8926 
let formatter = NSNumberFormatter() 
formatter.numberStyle = .DecimalStyle 
formatter.maximumFractionDigits = 2 
print(formatter.stringFromNumber(decimal)!) 
// "171.89" 

formatter.numberStyle = .SpellOutStyle 
print(formatter.stringFromNumber(decimal)!) 
// "one hundred seventy-one point eight nine two six\n" 

似乎.SpellOutStyle没有出于某种原因荣誉maximumFractionDigits

我错过了什么,或者我是否必须像动物一样截断它们?

let truncDecimal = Double(Int(decimal * 100))/100.0 
print(formatter.stringFromNumber(truncDecimal)!) 
// "one hundred seventy-one point eight nine\n" 

这似乎很疯狂我可以使用格式化程序去掉数字的数字而不是单词。

回答

1

Swift NSNumberFormatter numberStyle SpellOutStyle为当前语言环境打印完整的数字。

做你想要什么,我建议创建一个双扩展名:

extension Double { 
    func roundToPlaces(places: Int) -> Double { 
     let divisor = pow(10.0, Double(places)) 
     return round(self * divisor)/divisor 
    } 
} 

然后你就可以打电话给你这样的代码:

let decimal = 171.8976 
let formatter = NSNumberFormatter() 
formatter.numberStyle = .DecimalStyle 
formatter.maximumFractionDigits = 2 
print(formatter.stringFromNumber(decimal)!) 
// "171.89" 

formatter.numberStyle = .SpellOutStyle 
print(formatter.stringFromNumber(decimal.roundToPlaces(2))!) 
// "one hundred seventy-one point nine" 
+1

感谢。我知道乘法和除法的概念,但没有想到将它放在扩展中,这是一个优雅的解决方案。 – zkarj

相关问题