是否有可能延长NSDecimalNumber
符合Encodable & Decodable
协议?制作NSDecimalNumber可编码
2
A
回答
1
在急速的,你应该使用Decimal型。该类型从框中确认为协议Encodable & Decodable
。
如果你在你的代码NSDecimalNumber
类型可以很容易地将它转换为Decimal
let objcDecimal = NSDecimalNumber(decimal: 10)
let swiftDecimal = (objcDecimal as Decimal)
3
这是不可能延长NSDecimalNumber
符合Encodable
& Decodable
协议。乔丹罗斯在下面的swift evolution email thread中解释它。
如果你需要你的API中NSDecimalValue
类型,你可以围绕Decimal
建立计算性能。
struct YourType: Codable {
var decimalNumber: NSDecimalNumber {
get { return NSDecimalNumber(decimal: decimalValue) }
set { decimalValue = newValue.decimalValue }
}
private var decimalValue: Decimal
}
Btw。如果你正在使用NSNumberFormatter
用于解析,谨防known bug导致在某些情况下,精度的损失。
let f = NumberFormatter()
f.generatesDecimalNumbers = true
f.locale = Locale(identifier: "en_US_POSIX")
let z = f.number(from: "8.3")!
// z.decimalValue._exponent is not -1
// z.decimalValue._mantissa is not (83, 0, 0, 0, 0, 0, 0, 0)
解析字符串这种方式来代替:
NSDecimalNumber(string: "8.3", locale: Locale(identifier: "en_US_POSIX"))
相关问题
- 1. NSDecimalNumber到NSDecimalNumber
- 2. NSDecimalNumber
- 3. 字符串NSDecimalNumber不工作
- 4. 比较NSDecimalNumber不会工作?
- 5. Rounding NSDecimalNumber
- 6. 制作可选编织物
- 7. 制作标签可编辑
- 8. NSDecimalNumber与NSDecimalNumber相乘返回0
- 9. RLMObject属性NSDecimalNumber
- 10. 财务的NSDecimalNumber
- 11. 减去NSDecimalNumber swift?
- 12. NSDecimalNumber round long numbers
- 13. Swift Overload NSDecimalNumber operators
- 14. NSDecimalNumber总和
- 15. 继承NSDecimalNumber
- 16. NSDecimalNumber减法
- 17. 在IB中显示NSDecimalNumber作为货币
- 18. 制作系统,可以通过调试编写代码
- 19. 用cual制作windows目录2012编码
- 20. 编码风险(游戏):制作土
- 21. NSDecimalNumber乘法奇怪
- 22. NSDecimalNumber比较失败
- 23. NSNumberFormatter,NSDecimalNumber和Scientific Notation
- 24. NSDecimalNumber出现NaN的
- 25. 如何使用NSDecimalNumber?
- 26. NSDecimalNumber乘法奇怪
- 27. 如何制作不可编辑的CellTable?
- 28. 制作UITextView不可编辑的用户
- 29. 制作一个NSTableCellView可编辑
- 30. 制作可编辑循环模板(PHP)
你尝试过这么远吗?你有什么要求?你想要编码/解码什么? –
@LorenzoB我检查Apple的文档https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types编码和解码的自定义类型。我试图解析来自服务器的响应,如果我使用Double,我会失去精度。 –