2017-05-30 68 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