2009-05-23 8 views
8

मैं कुछ रिपोर्ट आउटपुट स्क्रिप्ट्स पर काम कर रहा हूं जिन्हें कुछ पैसे मूल्यों पर कुछ प्राथमिक गणना करने की आवश्यकता है।मैं PHP में पैसे से संबंधित गणना कैसे सुरक्षित रूप से कर सकता हूं?

मैं इस उद्देश्य के लिए अस्थायी बिंदु अंकगणित की सीमाओं से अवगत हूं, हालांकि इनपुट मान सभी दशमलव प्रारूप में हैं, इसलिए यदि मैं उन पर अंकगणितीय ऑपरेटरों का उपयोग करता हूं तो PHP उन्हें फ़्लोट करने के लिए कलाकारों का उपयोग करेगा।

तो संख्याओं को संभालने का सबसे अच्छा तरीका क्या है? क्या मुझे BCMath का उपयोग करना चाहिए? क्या .NET में Decimal के समान कुछ है? या अगर मैं int में वापस आ गया तो अंकगणितीय ऑपरेटरों का उपयोग करना सुरक्षित है?

+0

यही वजह है कि कोबोल का अभी भी वित्तीय रूप से उपयोग किया जाता है। आप आसानी से दशमलव संख्याओं के साथ काम कर सकते हैं। –

उत्तर

10

डॉलर ($ 1.54) में काम न करें, सेंट में काम करें: (154 सी)। जब तक आपको कार्य करने की आवश्यकता न हो, जहां एक प्रतिशत के अंश महत्वपूर्ण हैं, तो आप पूर्णांक के साथ काम करेंगे और सब ठीक है। यदि आप एक प्रतिशत के दसवें में रुचि रखते हैं, तो बस दस से सब कुछ गुणा करें!

+9

सामान्यीकरण: एक इकाई का उपयोग करें जो आपकी मुद्रा के लिए परमाणु है। – SingleNegationElimination

+0

मुद्रा बदलने के लिए, बैंक हमें 8 दशमलव के साथ दरें प्रदान करते हैं। –

+0

प्रदर्शन के लिए क्या? इसे अभी भी $ 1.54 के रूप में दिखाया जाना चाहिए। क्या फ्लोटिंग पॉइंट नंबर के साथ कोई स्थिति है जहां मैं 1.53 या 1.55 के साथ समाप्त हो जाऊंगा? – Shabbyrobe

8

यदि आप बीसीएमएथ का उपयोग करते हैं तो सभी मान स्ट्रिंग में संग्रहीत किए जाएंगे और स्ट्रिंग्स के रूप में कार्यों को पास कर देंगे, जैसे परिणाम एक स्ट्रिंग होगा। इसलिए, आपको किसी भी कास्टिंग की आवश्यकता नहीं है लेकिन यह सुनिश्चित करें कि फ़ंक्शन को दी गई संख्या एक मूल्य संख्यात्मक मान है। व्यक्तिगत रूप से, यदि गणित को दशमलव पक्ष पर उच्च परिशुद्धता की आवश्यकता है तो बीसीएमथ का उपयोग करें।

-4

यदि आप उचित मात्रा ("सामान्य व्यक्ति" के लिए) के साथ काम कर रहे हैं, तो फ़्लोटिंग पॉइंट का उपयोग करने में कोई समस्या नहीं होने की संभावना है, खासकर यदि आप केवल जोड़ना और घटाना चाहते हैं, तो ब्याज, कहें, ब्याज गणना।

यदि आप त्वरित सुधार की तलाश में हैं, तो पूर्णांक पर स्विच करने से आपकी मदद करने की संभावना नहीं है; आपको अभी भी ओवरफ्लो से निपटना होगा। (किसी ने यहां उल्लेख करने के लिए संपादित किया है कि यदि PHP पूर्णांक प्रकार की सीमाओं से परे एक संख्या का सामना करता है, तो यह interpreted as a float instead होगा। लेकिन फिर आप फ़्लोटिंग पॉइंट का उपयोग करने की अपनी मूल समस्या पर वापस आ गए हैं!) मनमाना लंबाई पूर्णांक (जीएमपी, उस से संदर्भित पेज) मदद कर सकते हैं।)

असल में, आधा assed तरीके से ऐसा करना ज्यादातर मामलों में काम करता है, और सस्ता है; इसे सही तरीके से करना एक गंभीर दर्द है। मेरा सुझाव यह है कि इसे एक व्यावसायिक समस्या के रूप में देखें: यदि कोई एक प्रतिशत खोने के बारे में शिकायत करता है, तो उन्हें एक डॉलर दें, और वास्तविक समाधान शुरू करने से परेशान न हों जब तक कि आप ऐसा करके अधिक डॉलर बचाएंगे।

+2

यह गलत है। फ़्लोटिंग पॉइंट सभी बेस -10 संख्याओं का प्रतिनिधित्व करने में असमर्थ हैं। यहां तक ​​कि छोटी संख्याओं, और सरल जोड़/घटाव के साथ, आप गलत परिणाम प्राप्त कर सकते हैं। – troelskn

+0

घुमावदार फ्लोटिंग पॉइंट नंबर 0.01 और 1.00 के बीच सभी संख्याओं का प्रतिनिधित्व कर सकते हैं (वहां महत्वपूर्ण महत्वपूर्ण नोट्स) ठीक है। –

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

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