Мне нужно правильно декодировать (Decodable
протокол) неточное десятичное значение, начиная с этого вопроса Я понимаю, как правильно обрабатывать создание десятичного числа, но как я могу это сделать при декодировании?
При попытке инициализировать любое число в виде строки
if let value = try! container.decode(String.self, forKey: .d) {
self.taxAmount = Decimal(string: value)
}
Я получаю Fatal Error: "Expected to decode String but found a number instead."
А если попытаться инициализировать 130.43 как десятичное число
if let value = try! container.decode(Decimal.self, forKey: .d) {
//value.description is 130.43000000000002048
self.d = Decimal(string: value.description)
//making subtotal to be also 130.43000000000002048 and not 130.43
}
Есть ли способ использовать любой из этих конструкторов при декодировании?
NSDecimalNumber(string: "1.66")
NSDecimalNumber(value: 166).dividing(by: 100)
Decimal(166)/Decimal(100)
Decimal(sign: .plus, exponent: -2, significand: 166)
Вот упрощенная версия JSON, который я получаю от внешнего сервиса:
{
"priceAfterTax": 150.00,
"priceBeforeTax": 130.43,
"tax": 15.00,
"taxAmount": 19.57
}
Примечание: я не могу изменить то, что принимается для декодирования, я застрял, работая с десятичными числами.