Сохранение десятичной дроби и валюты в базовых данных - PullRequest
0 голосов
/ 20 мая 2018

Можно ли сохранить числа с разделителями группировки и валютой в базовые данные, и если это так, кто-то может указать мне правильное направление.

У меня есть 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 голосов
/ 21 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...