2009-07-29 10 views
5

समस्या यह है कि, जब मैं सही परिणामों को देने के बजाय तालिका में दो या दो से अधिक युगल जोड़ता हूं, तो यह लगभग दस या अधिक अंक जोड़ता है। उदाहरण के लिए 0.5 + 1.5 = 1.99 99 99 99 998 या 5.5 + 8.5 = 14.0000000001। कोई विचार? (मुझे पता है कि यह एन 00 बी प्रश्न है और मुझे 9वीं कक्षा में परीक्षाओं में इस तरह की चीजों से निपटना याद है, लेकिन मुझे याद नहीं है कि मैंने इसे कैसे किया था: पी)MySQL गणना समस्याएं: 1 + 1 = 1.99 99 99 999

+0

आप वास्तव में क्या पूछ रहे हैं? क्या आप जानना चाहते हैं कि यह व्यवहार क्यों होता है? या आप सिर्फ सही परिणाम प्रदान करना चाहते हैं? – Velociraptors

+7

यह मानक फ़्लोटिंग-पॉइंट प्रश्न है। 100 से अधिक समान प्रश्नों के लिए कृपया [फ़्लोटिंग पॉइंट] के लिए SO खोजें। उनमें से एक आपकी मदद कर सकता है। –

+2

मेरे हाई स्कूल गणित शिक्षक ने हमें बताया कि .99 99 ... = 1, तो मुझे नहीं पता कि आपकी समस्या क्या है? :) – Jason

उत्तर

9

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_format

आप इस तरह से अगर thats क्या आपके बाद संख्या फ़ॉर्मेट कर सकते हैं?

+1

धन्यवाद, यही वह था जो मैं बाद में था। मुझे जो कुछ चाहिए था उसे निर्दिष्ट करने के लिए खेद है ... – Ant

+0

कोई समस्या दोस्त :) – pjanaway

2

पूर्णांक की अपेक्षा न करें जब आप फ्लोटिंग पॉइंट प्रकारों के साथ काम करते हैं।

+2

मैं कहूंगा कि, "यदि आप फ़्लोटिंग पॉइंट प्रकारों के इच्छित उद्देश्य को नहीं जानते हैं, तो उनका उपयोग न करें।" और "पेनीज़ का ट्रैक रखने के लिए" या "दशमलव स्थान जोड़ें" उद्देश्य उद्देश्य नहीं है। – quillbreaker

3

This article इस मुद्दे को काफी अच्छी तरह से बताता है।

संक्षेप में, बहुत बड़ी, या बहुत छोटी फ्लोटिंग पॉइंट संख्याओं के परिणामस्वरूप गणना के दौरान परिशुद्धता का नुकसान हो सकता है।

2

सुनिश्चित नहीं हैं कि एक व्याख्या या एक समाधान के लिए देख रहे हैं, लेकिन आप पहले से ही अच्छी स्पष्टीकरण की ओर इशारा मिल गया है के बाद से अगर ....

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

तो यदि आप $ 3.99 की लागत वाले विजेट का प्रतिनिधित्व कर रहे हैं, तो आप 39 9 को WIDGET.cost फ़ील्ड में डाल दें।

डुनो अगर यह आपकी स्थिति पर लागू होता है या नहीं। लेकिन अंगूठे का सामान्य नियम यह है कि फ्लोटिंग पॉइंट नंबर हमेशा अनुमानित होते हैं। :-) यदि परिशुद्धता मायने रखती है, तो पूर्णांक का उपयोग करने का एक तरीका जानें।

8

1 और 1 तैरता या डबल्स के रूप में जोड़ा जा रहा है कुछ भी लेकिन 2.

में परिणाम नहीं चाहिए मैं इसे कठिन विश्वास है कि 0.5 + 1.5 लेकिन 2.

कुछ भी करने के लिए बाहर आता है लगता है इन सभी नंबरों हो सकता है बाइनरी फ्लोटिंग बिंदु में सही ढंग से प्रतिनिधित्व किया।

मुझे यह कहना नफरत है कि मैं आपके उदाहरणों पर विश्वास नहीं करता हूं, लेकिन मैं नहीं करता हूं। :-)

हालांकि, मुझे विश्वास है कि आपको 1.1 जैसी संख्या में परेशानी हो सकती है।

क्यों? क्योंकि 1/10 बाइनरी में दोहराने वाला दशमलव साबित होता है।

समस्या तब होती है जब दशमलव और बाइनरी प्रस्तुतियों के बीच फ़्लोटिंग पॉइंट संख्याओं को परिवर्तित करने का प्रयास किया जाता है। कुछ संख्याएं यात्रा को ठीक बनाती हैं, लेकिन अन्य केवल अनुमानित हैं।


हालांकि, अगर आपकी उदाहरण वास्तव में उस तरह काम करते हैं, मुझे नहीं पता क्या हो रहा है, और मैं जानता हूँ कि अच्छा लगेगा।

+0

असल में हाँ, उदाहरण केवल उदाहरण हैं। असली समस्या में विभिन्न तालिकाओं से बहुत सारे एसयूएम शामिल हैं और मुझे लगता है कि यह वास्तव में पूरी प्रक्रिया पोस्ट करने में मदद नहीं करेगा ... – Ant

+5

मुझे पता था! आपके उदाहरणों में केवल प्रामाणिकता की गंध थी जब तक कि मैंने वास्तव में उन पर ध्यान नहीं दिया। इसलिए मैं आपको सफल हुडविंकिंग के लिए +1 देता हूं। आप बता सकते हैं कि सॉर्स ने कई बार ऐसे प्रश्नों को देखा है कि हम वास्तव में उन्हें अब नहीं पढ़ते हैं। :-) – Nosredna

4

फ़्लोटिंग पॉइंट नंबर हमेशा अनुमानित होते हैं। :-) यदि परिशुद्धता मायने रखती है, तो पूर्णांक का उपयोग करने का एक तरीका जानें।

मेरे अनुभव में, जब मैं दशमलव के बजाय डेटाप्रकार नाव/डबल का इस्तेमाल किया, मैं हमेशा सटीक परिणाम मिल गया था।

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