是否有可能延長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,我會失去精度。 –