2010-10-12 56 views
2

將nsdecimalnumbers存儲在數據庫中的最佳方式是什麼?像float,real和double這樣的數字類型已經不存在了,因爲保留貨幣使用的精度非常重要。nsdecimalnumber應該如何存儲在數據庫中?

我所考慮的兩種選擇是字符串和存儲兩個整數,一個持有尾數,另一個持有指數。後一種方法面臨的挑戰是我沒有看到一種簡單的方法將nsdecimalnumber中的尾數和指數拉出來。我可以從NSDecimalNumber獲取NSDecimal,但尾數和指數屬性似乎是私有的!也許我可以反轉數字=(尾數* 10 ^指數),但有沒有更好的方法來做到這一點?

我的要求是,我需要在數據庫中的該字段上執行一些彙總和操作。如果我將其作爲字符串存儲,則執行此計算可能會更困難。我仍然需要編寫一個自定義函數來總結數據庫中的尾數和指數,所以也許它仍然很重。

編輯:我可以訪問指數,但尾數保持奇怪的方式...在調試器中戳它顯示它是一個short(int)數組。

+0

你意識到NSDecimal是在NSDecimal.h中定義的,如果你只是在按住cmd的情況下雙擊就可見?它也列在文檔中,雖然它說這些字段是私人的。 – 2010-10-12 21:45:38

+0

是的,我知道我現在可以訪問它們,但是尾數保留爲一系列短整數。我猜這是unsigned long long的實現細節?如何從一系列短整數中可靠地讀取數據? – Ying 2010-10-13 12:16:40

回答

1

NSDecimalNumber符合NSCoding,所以你可以將它添加到你的數據庫之前,encodeWithCoder:編碼,然後從數據庫中檢索時,它使用initWithCoder:解碼。

有關使用編碼器的更多詳細信息,請參閱Archives and Serializations Programming Guide,特別是「Encoding and Decoding Objects」。

+0

這是一個有趣的建議。如果數據庫不僅僅是由iphone來查看,而是同步到一個服務器,在那裏它可能會被PHP或Java戳穿? – Ying 2010-10-13 12:19:31

+0

它不那麼簡單,但你可以讓它工作。可能最好的方法是編寫自己的編碼器並在Java和PHP中創建等效的解碼器(或解串器)類。但是,現在您又回到了原來的問題,因爲您必須決定如何正確編碼NSDecimal的組件。 – 2010-10-13 14:10:32

相關問題