在核心数据中保存小数点和货币
Saving decimal and currency in Core Data
是否可以将带有分组分隔符和货币的数字保存到核心数据中,如果可以,有人可以指出正确的方向。
我有 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
}
NSDecimalNumber(string:)
只接受纯数字,不接受格式化数字。如果用户正在输入格式化的货币值,那么您需要在 .currency
模式下使用 NumberFormatter
将字符串解析为数字。
示例:
print(NSDecimalNumber(string: ",560.45"))
输出:
NaN
使用 NumberFormatter
:
let curFmt = NumberFormatter()
curFmt.generatesDecimalNumbers = true
curFmt.numberStyle = .currency
if let num = curFmt.number(from: ",560.45") {
print(num)
} else {
print("Not valid currency number")
}
输出:
4560.45
是否可以将带有分组分隔符和货币的数字保存到核心数据中,如果可以,有人可以指出正确的方向。
我有 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
}
NSDecimalNumber(string:)
只接受纯数字,不接受格式化数字。如果用户正在输入格式化的货币值,那么您需要在 .currency
模式下使用 NumberFormatter
将字符串解析为数字。
示例:
print(NSDecimalNumber(string: ",560.45"))
输出:
NaN
使用 NumberFormatter
:
let curFmt = NumberFormatter()
curFmt.generatesDecimalNumbers = true
curFmt.numberStyle = .currency
if let num = curFmt.number(from: ",560.45") {
print(num)
} else {
print("Not valid currency number")
}
输出:
4560.45