Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL और PHP दशमलव सटीक गलत

एक लेख जो मैंने Authorize.Net के लिए लिखा था :

वन प्लस वन दो के बराबर है, है ना? कैसा रहेगा .2 जमा 1.4 गुना 10? वह 16 के बराबर है, है ना? यदि आप PHP (या अधिकांश अन्य प्रोग्रामिंग भाषाओं) के साथ गणित कर रहे हैं तो नहीं:

echo floor((0.2 + 1.4) * 10); // Should be 16. But it's 15!

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

ई.पू. गणित समाधान

सौभाग्य से PHP BC Math विस्तार प्रदान करता है जो "मनमाने ढंग से सटीक गणित के लिए PHP बाइनरी कैलकुलेटर प्रदान करता है जो किसी भी आकार और परिशुद्धता की संख्या का समर्थन करता है, जिसे स्ट्रिंग के रूप में दर्शाया जाता है।" दूसरे शब्दों में, आप इस एक्सटेंशन का उपयोग करके मौद्रिक मूल्यों के साथ सटीक गणित कर सकते हैं। BC मैथ एक्सटेंशन में फ़ंक्शन शामिल है s जो आपको अतिरिक्त , घटाव , गुणा , और डिवीजन

एक बेहतर उदाहरण

यहां ऊपर जैसा ही उदाहरण दिया गया है लेकिन हमारे लिए गणित करने के लिए bcadd() फ़ंक्शन का उपयोग करना। इसमें तीन पैरामीटर लगते हैं। पहले दो वे मान हैं जिन्हें हम जोड़ना चाहते हैं और तीसरा दशमलव स्थानों की संख्या है जिसे हम सटीक होना चाहते हैं। चूंकि हम पैसे के साथ काम कर रहे हैं, इसलिए हम सटीकता को दो दशमलव स्थानों पर सेट करेंगे।

echo floor(bcadd('0.2', '1.4', 2) * 10); // It's 16 like we would expect it to be.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL वर्तमान डेटा को योग करने के लिए फ़ंक्शन का चयन करें

  2. मैं दो MySQL तालिकाओं को कैसे सिंक्रनाइज़ कर सकता हूं जिनमें समान संरचनाएं और अलग सर्वर हैं?

  3. फ्लेक्स का उपयोग करके एक MySQL डीबी को कैसे अपडेट करें

  4. उन्नत MySQL शामिल हो रहा है। क्वेरी को तेज करना

  5. PostgreSQL बनाम MySQL:कौन सा सर्वश्रेष्ठ है?