यहाँMoney वर्णित के अनुसार प्रकार जैसे लगता है हतोत्साहित किया जाता है
मेरे आवेदन को मुद्रा स्टोर करने की आवश्यकता है, मैं किस डेटाटाइप का उपयोग कर रहा हूं? संख्यात्मक, धन या FLOAT?
यहाँMoney वर्णित के अनुसार प्रकार जैसे लगता है हतोत्साहित किया जाता है
मेरे आवेदन को मुद्रा स्टोर करने की आवश्यकता है, मैं किस डेटाटाइप का उपयोग कर रहा हूं? संख्यात्मक, धन या FLOAT?
जवाबों:
न्यूमेरिक मजबूर 2 इकाइयों परिशुद्धता के साथ। मुद्रा का प्रतिनिधित्व करने के लिए कभी भी डेटाटाइप की तरह फ्लोट या फ्लोट का उपयोग न करें क्योंकि यदि आप करते हैं, तो वित्तीय रिपोर्ट के नीचे की रेखा का आंकड़ा + या - कुछ डॉलर के गलत होने पर लोग दुखी होने वाले हैं।
पैसा प्रकार केवल ऐतिहासिक कारणों से बचा है जहां तक मैं बता सकता हूं।
scale - precision
numeric(3,2)अधिकतम स्टोर करने में सक्षम होगा9.99 3-2 = 1
आपका स्रोत किसी भी तरह से आधिकारिक नहीं है। यह 2011 की है और मैं लेखकों को भी नहीं जानता। अगर पैसे का प्रकार आधिकारिक तौर पर "हतोत्साहित" किया गया था, तो पोस्टग्रेएसक्यूएल मैनुअल में ऐसा कहेगा - जो यह नहीं करता है ।
के लिए एक और अधिक आधिकारिक स्रोत , पढ़ा (बस इस सप्ताह से!) Pgsql-सामान्य रूप में इस सूत्र डी'आर्सी जेएम कैन (पैसा प्रकार के मूल लेखक) और टॉम लेन और कोर डेवलपर्स से बयान के साथ,:
संबंधित उत्तर (और टिप्पणियाँ!) हालिया रिलीज़ में सुधार के बारे में:
असल में, moneyइसके (बहुत सीमित) उपयोग हैं। The Postgres Wiki उन संकीर्ण रूप से परिभाषित मामलों को छोड़कर, मोटे तौर पर इससे बचने का सुझाव देता है। लाभ से अधिक numericहै प्रदर्शन ।
decimalnumericPostgres में केवल एक उपनाम है , और व्यापक रूप से मौद्रिक डेटा के लिए उपयोग किया जाता है, एक "मनमाना सटीक" प्रकार है। मैनुअल :
प्रकार
numericबहुत बड़ी संख्या में अंकों के साथ संख्याओं को संग्रहीत कर सकता है। यह विशेष रूप से मौद्रिक मात्रा और अन्य मात्रा के भंडारण के लिए अनुशंसित है जहां सटीकता की आवश्यकता होती है।
व्यक्तिगत रूप से, मुझे मुद्रा को integerसेंट के प्रतिनिधित्व के रूप में संग्रहीत करना पसंद है यदि आंशिक अंश कभी नहीं होते हैं (मूल रूप से जहां पैसा समझ में आता है)। यह किसी भी अन्य विकल्पों की तुलना में अधिक कुशल है।
moneyप्रकार वास्तव में, हटा दिया गया था। मुद्दों को ठीक कर दिया गया है और बाद के संस्करणों में प्रकार को वापस जोड़ दिया गया है। व्यक्तिगत रूप से मैं मुद्रा का integerप्रतिनिधित्व सेंट के रूप में करना पसंद करता हूं ।
आपकी पसंद हैं:
bigint: राशि को सेंट में स्टोर करें। यह वही है जो EFTPOS लेनदेन का उपयोग करता है।decimal(12,2): राशि को दो दशमलव स्थानों के साथ संग्रहित करें। यह सबसे सामान्य खाता बही सॉफ्टवेयर का उपयोग करता है।float: भयानक विचार - अपर्याप्त सटीकता। यह भोले डेवलपर्स का उपयोग करता है।विकल्प 2 सबसे आम और सबसे आसान काम है। सटीक (मेरे उदाहरण में 12, सभी में 12 अंक) का अर्थ करें जितना बड़ा या छोटा आपके लिए सबसे अच्छा काम करता है।
ध्यान दें कि यदि आप कई लेन-देन एकत्र कर रहे हैं जो एक गणना का परिणाम था (उदाहरण के लिए एक विनिमय दर को शामिल करना) जिसमें एक भी मूल्य है जिसका व्यवसाय अर्थ है, सटीक सटीक मैक्रो मान प्रदान करने के लिए उच्चतर होना चाहिए; कुछ का उपयोग करने पर विचार करें decimal(18, 8)ताकि योग सटीक हो और प्रदर्शन के लिए व्यक्तिगत मानों को प्रतिशत सटीकता के लिए गोल किया जा सके।
numeric(15,4)या numeric(15,6)एक अच्छा विचार है।
मैं अपने सभी मौद्रिक क्षेत्र इस प्रकार रखता हूं:
numeric(15,6)
ऐसा लगता है कि कई दशमलव स्थानों के लिए अत्यधिक है, लेकिन अगर वहाँ भी थोड़ी सी संभावना है कि आप कई मुद्राओं से निपटने के लिए आप परिवर्तित करने के लिए बहुत सटीक आवश्यकता होगी कि है। कोई फर्क नहीं पड़ता कि मैं एक उपयोगकर्ता को प्रस्तुत कर रहा हूं, मैं हमेशा यूएस डॉलर में संग्रहीत करता हूं। इस तरह मैं आसानी से किसी भी अन्य मुद्रा में परिवर्तित कर सकता हूं, जिसमें शामिल दिन के लिए रूपांतरण दर दी गई है।
यदि आप एक मुद्रा के अलावा कुछ नहीं करते हैं, तो सबसे बुरी बात यह है कि आपने कुछ जीरो स्टोर करने के लिए थोड़ी जगह बर्बाद की है।
bigintमैं माइक्रो-डॉलर (या समान प्रमुख मुद्रा) का उपयोग करने की सलाह देता हूं। माइक्रो का मतलब है 1 मिलियन तो 1 माइक्रो-डॉलर = 0.000001।
numeric(15,6)एक और जवाब में क्यों सुझाया गया?
bigint। नहीं है developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... लेकिन यह सीमित समर्थन के साथ (अब के लिए) चेतावनियां (जैसे आप नहीं गुणा यह एक नाव के द्वारा आसानी से जब मुद्रा रूपांतरण कर सकते हैं) आता है और । यह देखते हुए कि माइक्रो-डॉलर का उपयोग करके आप जेएस पूर्णांक में अधिकतम स्टोर कर सकते हैं $ 9 बिलियन है जो शायद अभी भी अधिकांश मामलों के लिए अच्छा है।
BigIntसबसे छोटी मुद्रा इकाई में मौद्रिक मूल्य का प्रतिनिधित्व करने वाले एक सकारात्मक पूर्णांक के रूप में मुद्रा को स्टोर करने के लिए उपयोग करें (जैसे, 100 सेंट $ 1.00 या 100 को स्टोर करने के लिए (100 (जापानी येन, एक शून्य-दशमलव मुद्रा)। यह वही है जो स्ट्राइप करता है - एक। वैश्विक ई-कॉमर्स के लिए सबसे महत्वपूर्ण वित्तीय सेवा कंपनियां।