floating point - Round a float does not work -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 5 जवाब
मुझे आश्चर्य है कि क्यों फ्लोटिंग नहीं हैं जब मैं ऐसा करता हूं:
$ shipping_cost = float (57.599999999999994) राउंड ($ शिपिंग_cost, 2)
इसका परिणाम है: 57.600000000000001
< P> क्या आपके पास कोई विचार है कि ऐसा क्यों है? क्या इसका सर्वर के साथ कुछ करना है?धन्यवाद
यद्यपि आपने यह निर्दिष्ट नहीं किया कि आप किस भाषा या क्रियान्वयन का उपयोग कर रहे हैं , यह लगभग निश्चित रूप से आईईईई -754 64-बिट बाइनरी फ़्लोटिंग-पॉइंट प्रारूप का उपयोग कर रहा है।
इस प्रारूप में, परिमित संख्याओं को पूर्णांक f से -2 से < > 53 के लिए +2 53 (अनन्य) और दो को कुछ शक्ति ई श्रेणी में -1074 से 971 (सम्मिलित) तक बढ़ाया गया है। प्रत्येक परिमित फ़्लोटिंग-पॉइंट मान में f 2 ई होता है (इन हिस्सों को थोड़ी-थोड़ी बदल दिया जाता है जब भंडारण के लिए इनकोड किया जाता है, लेकिन यह विवरण गणितीय रूप से समतुल्य है।)
किसी संख्या का प्रतिनिधित्व करने के लिए, इसे इस रूप में रखना आवश्यक है उदाहरण के लिए, .75 3 है। 2 -2 ।
इस रूप में मूल्य 57.6 को बिल्कुल नहीं लिखा जा सकता है निकटतम संभव मान 8106479329266893 है 2 -47 = 8106479329266893/140737488355328 = 57.6000000000000000142108547152020037174224853515625 (आप 57.6 के करीब नहीं पा सकते हैं क्योंकि अंश 1 या -1 को जोड़कर मूल्य को 57.6 से दूर स्थानांतरित किया जाता है और एक को एक्सपोनेंट में जोड़कर संख्या 2 53 से अधिक हो जाएगी। निकटतम आप फ्लोटिंग-पॉइंट प्रारूप की सीमा के भीतर प्राप्त कर सकते हैं।)
इतना है कि राउंड (57.599999999999994, 2)
रिटर्न।
जब यह मुद्रित होता है, जो सॉफ्टवेयर आप कुछ अंकों को छोड़कर उपयोग कर रहे हैं। सटीक मूल्य को अलग-अलग पहचानने के लिए यह पर्याप्त अंकों को प्रिंट करने लगता है (कोई व्यक्ति जो फ़्लोटिंग-पॉइंट प्रारूप को जानता है, वह सटीक मान लगाने के लिए दिखाए गए अंकों का उपयोग कर सकता है), लेकिन पूरी तरह से सटीक मान दिखाने के लिए पर्याप्त नहीं है।
Comments
Post a Comment