2012-02-08 13 views
7

मैं एंड्रॉइड में एसक्लाइट डेटाबेस में मुद्रा मानों को स्टोर करने की कोशिश कर रहा हूं। मुझे नहीं लगता कि int का उपयोग यहां किया जाएगा। मैंने सुना है कि Bigdecimal का उपयोग किया जा सकता है। अगर कोई मुझे बता सकता है कि इसका उपयोग एसकलाइट डेटाबेस में मूल्य भेजने के लिए किया जाना चाहिए।एसक्यूलाइट एंड्रॉइड डेटाबेस में मुद्रा संग्रह

उत्तर

11

बिगडिसिल को स्ट्रिंग के रूप में स्टोर करें।

आप toPlainString() विधि का उपयोग कर सकते हैं।

BigDecimal b = new BigDecimal(); 
String s = b.toPlainString(); 

फिर जब आप इसे डेटाबेस से खींचते हैं तो आप एक नया BigDecimal बना सकते हैं।

BigDecimal c = new BigDecimal(String s) 

मान लीजिए या SQLite 3.0 सभी डेटा प्रकारों को तारों के रूप में स्टोर नहीं करता है, भले ही आप कहते हैं कि यह एक इंटीजर होना चाहिए। this web page from the official SQLite website पर एक नज़र डालें और "मेनिफेस्ट टाइपिंग और बीएलओबी सपोर्ट" अनुभाग पर स्क्रॉल करें। यह इस बारे में बात करता है कि यह आपको अन्य प्रकार के कॉलम में तारों को कैसे स्टोर करेगा।

+0

मुझे विश्वास नहीं है: SQLite 3.0 पूर्णांक के रूप में पूर्णांक स्टोर करता है। यह पुराना संस्करण 2.8 था जो सबकुछ स्ट्रिंग के रूप में संग्रहीत करता था। – Jeff

+0

यह गलत है। साइट पर जाएं (मैंने अभी लिंक तय किया है) और इसके लिए खोजें: अंतर यह है कि प्रारूप रूपांतरण संभव नहीं होने पर भी SQLite 3.0 डेटा संग्रहीत करेगा। – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

आपको उस पृष्ठ से पिछली वाक्य भी शामिल करनी चाहिए: "जब कॉलम में डेटा डाला जाता है, तो वह कॉलम डेटा स्वरूप को कॉलम के घोषित प्रकार में बदलने का प्रयास करेगा"। जब आप एक कॉलम को इंटीजर के रूप में घोषित करते हैं और स्ट्रिंग को '12345' में संग्रहीत करते हैं, तो SQLite उस स्ट्रिंग को पूर्णांक में परिवर्तित कर देगा और इसे पूर्णांक के रूप में संग्रहीत करेगा। – Jeff

0

बस यहां Int का उपयोग करें। चूंकि एसक्यूलाइट int के लिए 8 बाइट्स का उपयोग करता है, इसलिए अधिकतम मान 2^64 है, जो 1.8446744e + 19 - 1 है, कम या कम 10^18, मुद्रा के लिए काफी बड़ा है।

इसके अलावा हम

संबंधित मुद्दे