2017-05-30 28 views
0

私は代わりにNSDecimalNumberを使用しようとしています。NSDecimal数乗算

私の問題は、切り替え時にそれを動作させる方法を理解できないことです。

@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が、私はそれが私の一部とすることができるかどうかわからないのです payPerMile.textが

を.currencyようにフォーマットされ.decimalするようにフォーマットされている私にはNaN

の結果を与えます問題かどうか。

答えて

0

payPerMileが.currencyとしてフォーマットされている場合は、通貨文字が含まれている可能性があります。このような文字列から単にNSDecimalNumberを作成することはできません。

2行目にsecondValueNaNが表示されます。

あなたができることは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