2012-07-24 14 views
6

मैं एक PHP स्क्रिप्ट है कि इस तरह के रूप में नाव मूल्यों, कि कुछ हद तक छोटे होते हैं, की एक डीबी तालिका के माध्यम से लग रहा है लिख रहा हूँ:क्यों MySQL वैज्ञानिक नोटेशन में कुछ फ्लोट लौट रहा है, लेकिन दूसरों को नहीं?

0.00052 
0.00134 
0.00103 
0.00149 
0.00085 
0.00068 
0.00077 
0.00088 
0.00169 
0.00063 

मेरे लिए अज्ञात कारणों से, कुछ मान वैज्ञानिक में डीबी में दिखाई देते हैं जैसे अंकन,:

1.12305e-06

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

इसे हल करने के तरीके पर कोई सुझाव? (float) पर टाइपकास्टिंग करने और number_format() और कई अन्य विकल्पों का उपयोग करने का प्रयास किया है, लेकिन हर बार कोई बदलाव नहीं है।

+0

मेरे सिर के शीर्ष से निश्चित नहीं है, लेकिन क्या MySQL वैज्ञानिक नोटेशन में मान प्रदर्शित करता है? मुझे पता है कि PHP निश्चित रूप से करता है। क्या आप उन मूल्यों को संभालने के तरीके के बारे में एक और पूर्ण परीक्षण केस दिखा सकते हैं? – deceze

+2

यह पता लगाने के लिए कि आप इस प्रारूप में हैं, आप इन्हें कैसे दिखाते हैं? क्या यह mysql है जो उन्हें इस तरह वापस कर रहा है, या वास्तव में यह केवल php का प्रतिनिधित्व है? क्या आप 'var_dump', 'echo',' print', आदि का उपयोग करते हैं? – Nanne

+1

कोई कारण नहीं है कि आप 'DECIMAL' डेटाटाइप का उपयोग नहीं कर रहे हैं? – Romain

उत्तर

2

सीएलआई (और शायद कहीं और) से जो दिखाया गया है उस पर छः अंकों की सीमा प्रतीत होती है। आपके पास उदाहरण 1.12305e-06 है जो 0.00000112305 है जो 0.00000 के रूप में दिखाया जाएगा - हालांकि स्पष्ट रूप से यह शून्य नहीं है।

यदि आप फ्लोट या युगल का उपयोग करने पर जोर दे रहे हैं, तो आपको दशमलव मान में प्रदर्शन को मजबूर करने के लिए round(columnName,5) जैसे कुछ का उपयोग करके उन्हें मजबूर करना होगा। अन्यथा, शायद एक दशमलव डेटा प्रकार पर स्विच करें।

http://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

क्योंकि फ्लोटिंग प्वाइंट मान अनुमानित हैं और सटीक मान के रूप में नहीं जमा हो रहे हैं से, उन्हें तुलना में के रूप में सही इलाज के लिए समस्याओं को जन्म दे सकता है प्रयास करता है। वे मंच या कार्यान्वयन निर्भरताओं के अधीन भी हैं। अधिक जानकारी के लिए, अनुभाग C.5.5.8, "Problems with Floating-Point Values"

यह सटीक समस्या के बारे में mysql मंचों पर यह thread भी देखें।

0

मेरे मामले में समाधान डेटाबेस में फ्लोट से दशमलव प्रकार में बदल रहा है, इसलिए टिप्पणी के लिए रोमेन के लिए धन्यवाद, जिसने मुझे उस समाधान को देखने के लिए प्रेरित किया!

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