2017-05-30 65 views
0

我試圖做的文本字段的一些計算我用它來工作雙打:NSDecimal的倍增

let firstValue = Double(miles.text!) 
    let secondValue = Double(payPerMile.text!) 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.minimumFractionDigits = 2 
    formatter.maximumFractionDigits = 2 
    formatter.locale = Locale.current 
    formatter.usesGroupingSeparator = true 

    let result = Double(firstValue! * secondValue!) as NSNumber 
    grossPay.text = "\(formatter.string(from: result)!)" 

雖然做關於這個問題更多的研究我被告知,用雙打是不是最好的路線去所以我試圖使用NSDecimalNumber。

我的問題是我無法弄清楚如何讓它在切換時工作。

@IBAction func miles(_ sender: Any) { 

    let firstValue = NSDecimalNumber(string: miles.text) 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .decimal 
    formatter.maximumFractionDigits = 2 
    formatter.usesGroupingSeparator = true 

    miles.text = "\(formatter.string(from: firstValue as NSNumber)!)" 

} 

@IBAction func payPerMile(_ sender: Any) { 

    let firstValue = NSDecimalNumber(string: payPerMile.text) 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.minimumFractionDigits = 2 
    formatter.maximumFractionDigits = 2 
    formatter.locale = Locale.current 
    formatter.usesGroupingSeparator = true 

    payPerMile.text = "\(formatter.string(from: firstValue as NSNumber)!)" 

} 

@IBAction func grossPay(_ sender: Any) { 

    let firstValue = NSDecimalNumber(string: miles.text!) 
    let secondValue = NSDecimalNumber(string: payPerMile.text!) 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.minimumFractionDigits = 2 
    formatter.maximumFractionDigits = 2 
    formatter.locale = Locale.current 
    formatter.usesGroupingSeparator = true 

    let result = (firstValue as Decimal) * (secondValue as Decimal) as NSDecimalNumber 
    grossPay.text = "\(formatter.string(from: result)!)" 

只是給了我楠結果

miles.text被格式化爲.decimal payPerMile.text被格式化爲.currency

我不知道,可能是部分我問題與否。

回答

0

如果payPerMile被格式化爲.currency,那麼它可能包含貨幣字符。您不能簡單地從這樣的字符串創建NSDecimalNumber

您的第二行爲secondValue提供NaN

你可以做什麼,是使用NumberFormatter從字符串中獲得NSNumber

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
let payPerMileNumber = formatter.number(from: "$34.75") // NSNumber with 34.75 
+0

對不起,長時間的休息.....我似乎無法得到那個工作 – OEZ

+0

您可以顯示'miles'和'payPerMile'文本的實際例子嗎? – fguchelaar

+0

我添加了里程和payPerMile的代碼....希望這是你需要的。 – OEZ