2017-01-18 18 views
0

我有一個關於這個答案的問題:https://stackoverflow.com/a/29783546/2529173語言環境 - 確定是否數量將小數進行格式化,或不

它的偉大工程,但在我的應用我需要的用戶選擇/改變自己的貨幣。我試圖設置這樣的語言環境,如下所示:

class CurrencyField: UITextField { 
    override func awakeFromNib() { 
    super.awakeFromNib() 
    addTarget(self, action: #selector(editingChanged), for: .editingChanged) 
    keyboardType = .numberPad 
    textAlignment = .right 
    editingChanged() 
    } 
    func editingChanged() { 
    Formatter.currency.locale = Locale(identifier: "es_CL") 
    text = Formatter.currency.string(from: (Double(string.numbers.integer)/100) as NSNumber) 
    } 
} 

struct Formatter { 
    static let currency = NumberFormatter(numberStyle: .currency) 
} 

extension UITextField { 
    var string: String { return text ?? "" } 
} 

extension String { 
    var numbers: String { return components(separatedBy: Numbers.characterSet.inverted).joined() } 
    var integer: Int { return Int(numbers) ?? 0 } 
} 

struct Numbers { static let characterSet = CharacterSet(charactersIn: "") } 

extension NumberFormatter { 
    convenience init(numberStyle: NumberFormatter.Style) { 
    self.init() 
    self.numberStyle = numberStyle 
    } 
} 

我這是因爲NumberFormatter不輸出此貨幣的小數。有沒有辦法得到這項工作?

+0

是,你確實是看到一個小數(時不應該有一個)的問題,或者你*不*看小數(時應該)? –

+0

在其他貨幣中,例如EUR,有一個小數,應該有一個。但是對於「es_CL」,似乎數字格式化爲無小數,所以代碼不起作用,因爲它將數字除以100,當您輸入「3」時,會給出格式爲「$ 0」的「0,03」 」。所以代碼不起作用,因爲新號碼永遠不會被設置。所以我不知何故需要確定一個語言環境是否會顯示小數 – user2529173

+0

@LeoDabus是的我試圖做到這一點,但我無法確定這一點。你知道嗎?我的意思是如何檢查區域設置 – user2529173

回答

0

這是我的解決方案現在:

class CurrencyField: UITextField { 

    let locale:Locale = Locale.current 

    override func awakeFromNib() { 
    super.awakeFromNib() 
    addTarget(self, action: #selector(editingChanged), for: .editingChanged) 
    keyboardType = .numberPad 
    textAlignment = .right 
    editingChanged() 
    } 
    func editingChanged() { 
    Formatter.currency.locale = locale 
    let divider:Double = pow(Double(10), Double(Formatter.currency.maximumFractionDigits)) 
    text = Formatter.currency.string(from: (Double(string.numbers.integer)/divider) as NSNumber) 


    } 
} 
相關問題