2016-05-09 63 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

相關問題