在核心数据中保存小数和货币

时间:2018-05-20 20:38:04

标签: swift core-data currency

是否可以通过将分隔符和货币分组保存到核心数据中来保存数字,如果是这样,有人可以指出我正确的方向。

我有mile.text这是一个带分组分隔符的十进制数,payPerMile.text是货币,然后是grossPay.text,也是货币。

一切都计算并显示正常,直到我保存。我保存时打印数字,分组分隔符后的所有内容都消失,货币行显示为NaN。

@IBAction func save(_ sender: UIButton) {

    if let item = item {

        item.startdate = startDate.text
        item.unitnumber = unitNumber.text
        item.miles = NSDecimalNumber(string: miles.text ?? "0.0")
        item.paypermile = NSDecimalNumber(string: payPerMile.text ?? "0.00")
        item.grosspay = NSDecimalNumber(string: grossPay.text ?? "0.00")
        item.company = company.text
        item.destination = destination.text
        item.enddate = endDate.text

    } else if let entitydescription = NSEntityDescription.entity(forEntityName: "DriveAwayMain", in: pc) {

        let item = DriveAwayMain(entity: entitydescription, insertInto: pc)

        item.startdate = startDate.text
        item.unitnumber = unitNumber.text
        item.miles = NSDecimalNumber(string: miles.text ?? "0.0")
        item.paypermile = NSDecimalNumber(string: payPerMile.text ?? "0.00")
        item.grosspay = NSDecimalNumber(string: grossPay.text ?? "0.00")
        item.company = company.text
        item.destination = destination.text
        item.enddate = endDate.text

    }

1 个答案:

答案 0 :(得分:0)

NSDecimalNumber(string:)只接受普通数字,而不是格式化数字。如果用户输入格式化的货币值,则需要在NumberFormatter模式下使用.currency将字符串解析为数字。

示例:

print(NSDecimalNumber(string: "$4,560.45"))

输出:

  

的NaN

使用NumberFormatter

let curFmt = NumberFormatter()
curFmt.generatesDecimalNumbers = true
curFmt.numberStyle = .currency
if let num = curFmt.number(from: "$4,560.45") {
    print(num)
} else {
    print("Not valid currency number")
}

输出:

  

4560.45