2012-06-08 18 views
12

में मुद्रा मानों को संग्रहीत करना इस सवाल से कई बार पूछा गया है, लेकिन मुझे इस विषय पर विवादित राय मिली हैं, इसलिए मैंने सोचा कि मैं इसे एक और एकीकृत निष्कर्ष की उम्मीद में फिर से लाऊंगा।MySQL डेटाबेस

मैं अपने डेटाबेस में एक मुद्रा मूल्य संग्रहीत करना चाहता हूं। आइए मान लें कि सभी प्रविष्टियां एक ही प्रकार की मुद्रा (उदाहरण के लिए यूएसडी) हैं और दोनों सकारात्मक और नकारात्मक मूल्यों की अनुमति है।

मेरा प्रारंभिक विचार संबंधित मुद्रा की छोटी इकाई के संदर्भ में मान को हस्ताक्षरित पूर्णांक के रूप में संग्रहीत करना होगा। उदाहरण के लिए, यदि मैं मूल्य $ 1.25 स्टोर करना चाहता हूं, तो मैं डेटाबेस में 125 डाल दूंगा, क्योंकि यूएसडी की सबसे छोटी इकाई $ 0.01 है। इस विधि के बारे में अच्छी बात यह है कि MySQL स्वचालित रूप से निकटतम पूर्णांक तक चलेगा। उदाहरण के लिए, यदि डॉलर का मूल्य $ 1.259 है, तो मैं 125.9 डाल सकता हूं, जो स्वचालित रूप से गोलाकार और 126 या $ 1.26 के रूप में संग्रहीत किया जाएगा।

तो, आपको क्या लगता है? क्या यह एक अच्छा दृष्टिकोण है या क्या कोई बेहतर तरीका है?

+1

'दशमलव (पी, रों)' http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html – DavidO

+0

आह, कि और अधिक समझ में आता है। फिर संख्या को प्रदर्शित करने से पहले 100 से विभाजित करने की आवश्यकता नहीं है। धन्यवाद! –

उत्तर

13

वित्तीय डेटा DECIMAL(p,s) के रूप में संग्रहीत किया जा सकता है जहां पी महत्वपूर्ण अंकों की संख्या है, और एस स्केल (दशमलव बिंदु के दाईं ओर स्थित स्थानों की संख्या) है। The MySQL documentation देखें।

ओ रेली High Performance MySQL से

इसके अलावा, अध्याय 3:

"... आप दशमलव का उपयोग करना चाहिए केवल जब तुम आंशिक संख्या के लिए सटीक परिणाम की जरूरत है - उदाहरण के लिए, जब वित्तीय डेटा भंडारण।"

ओ रेली Learning MySQL से:

DECIMAL है, "... एक आमतौर पर इस्तेमाल किया सांख्यिक प्रकार एक निश्चित बिंदु इस तरह के एक वेतन या दूरी के रूप में NUMBER स्टोर ...।"

और MySQL Pocket Reference:

DECIMAL "... एसटू रेस फ्लोटिंग-पॉइंट नंबर जहां परिशुद्धता महत्वपूर्ण है, जैसे कि मौद्रिक मूल्यों के लिए। "

2

आपके द्वारा वर्णित दृष्टिकोण में कुछ भी गलत नहीं है। इस प्रश्न की बात आने पर कोई सही या गलत नहीं है।

आपको यह ध्यान रखना होगा कि उपयोगकर्ता को $ मूल्य प्रदर्शित करने के लिए, आपको हमेशा एक डिवीजन ऑपरेशन या किसी प्रकार का स्वरूपण करना होगा।

क्या आपके सूत्रों/गणनाओं को डीबग करना आसान होगा यदि सबकुछ सेंट या डॉलर में था? क्या आप सेंट्स या डॉलर में मूल्य प्रदर्शित करेंगे? आदि

इसे सरल रखें, लेकिन किसी भी तरह से आपको दशमलव का उपयोग करना होगा।

+1

असल में यदि आपको सटीकता की आवश्यकता है, तो आप इसे एक int के रूप में स्टोर नहीं कर सकते हैं, क्योंकि आप आंशिक मान खो देंगे, जो सरकारी करों जैसी चीजों के लिए आवश्यक हैं। – Alan

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