2010-09-08 12 views
8

यदि कोई पंक्ति में कोई कीमत 38.03 है, तो निम्न खोज प्रतिबंधों को परिणाम को containg पंक्ति को वापस कर देना चाहिए।MySQL ऑपरेटर से अधिक या उसके बराबर है या उसके दायित्व के बराबर है

WHERE price >= '38.02' AND price <= '38.03' (यह काम करता है)

WHERE price >= '20' AND price <= '100' (यह काम करता है)

WHERE price >= '38.03' AND price <= '38.03' (यह काम नहीं करता)

WHERE price >= '38.03' AND price <= '100' (यह काम नहीं करता)

WHERE price >= '38.03' (यह नहीं करता है काम नहीं)

WHERE price <= '38.03' (यह काम करता है)

कीमत डीबी में एक फ्लोट के रूप में संग्रहीत की जाती है।

तो मूल रूप से, <= काम कर रहा है जबकि >= नहीं है। क्या ऐसा कोई कारण है?

+1

आपको सिंगल कोट्स में मूल्य को संलग्न करने की आवश्यकता क्यों है? – BoltClock

+1

क्या यह शास्त्रीय फ़्लोटिंग पॉइंट तुलना समस्या की भिन्नता नहीं है? ... मैं नाम भूल गया हूं ... –

+3

अब बहुत देर हो सकती है, लेकिन कीमतें (और धन) को हमेशा डेसिमल प्रकार के रूप में संग्रहीत किया जाना चाहिए, कभी नहीं तैरता है। http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html – msw

उत्तर

23

ध्यान रखें कि float एक त्रुटिपूर्ण डेटा प्रकार जब यह परिशुद्धता के लिए आता है। यदि आप फ्लोट के रूप में 12 का प्रतिनिधित्व करते हैं, तो आपको 11.99999999999998 या कुछ मिलेगा।

'38.03' को दशमलव में परिवर्तित किया जा सकता है, या अन्य डेटा प्रकार जो अधिक सटीक है (आरडीबीएमएस के आधार पर, मैं यहां सामान्य हूं), और यह फ्लोट वैल्यू से अलग होगा।

फ्लोट 32 बिट, कम परिशुद्धता है। 64 बिट डेटा प्रकार होने के कारण डबल बहुत बेहतर काम करता है। कुछ सिस्टम में दशमलव डेटा प्रकार 128 सटीक संख्यात्मक डेटा प्रकार हैं जो बहुत सटीक संख्यात्मक मानों को संग्रहीत करने के लिए होते हैं, और आमतौर पर पैसे को दर्शाने के लिए उपयोग किया जाता है।

और, float मानों के = ऑपरेटर का उपयोग करके तुलना करने की आदत छोड़ें। फ़्लोट्स का उपयोग अनुमानित और तेज़ गणनाओं के लिए किया जाता है, और float के मान की जांच के लिए केवल एक सीमा के साथ तुलना स्वीकार्य है। यह मूल रूप से हर एक प्रणाली के लिए मान्य है।

+2

+1 हाँ, बस इसके बजाय 'DECIMAL' का उपयोग करें। MySQL उन लोगों के साथ बहुत अच्छा है। – BoltClock

+0

यहां तक ​​कि 128 बिट्स आपको 0.1 को बिल्कुल व्यक्त करने में मदद नहीं करेंगे। पूर्णांक और पूर्णांक के रूप में पूर्णांक के रूप में धन का सबसे अच्छा प्रतिनिधित्व किया जाता है। – duffymo

+0

@ डफिमो, आप एक निश्चित बिंदु दशमलव के बारे में बात कर रहे हैं। दशमलव के 2 प्रकार होते हैं, और कुछ आरडीबीएमएस में 'पैसा' डेटा प्रकार होता है, जो 2-4 दशमलव स्थानों के साथ एक निश्चित बिंदु दशमलव होता है। – AlexanderMP

0

जब आप उद्धरण (') का उपयोग करते हैं तो आपके चर को स्ट्रिंग के रूप में माना जाएगा। मुझे लगता है कि आपकी समस्या है।

प्रयास करें: कहां कीमत> = 38.03 और कीमत < = 38,03

+2

इसे स्वयं आज़माएं और आप देखेंगे कि इसमें कोई फर्क नहीं पड़ता है। :) –

+0

ऊपर दिए गए प्रश्न के बराबर पूछे जाने पर मूल्य कहाँ है = 38.03 –

+2

mysql> चुनें 38.03 <= 38.03; परिणाम: 1 mysql> चुनें 38.03 <38.03; परिणाम: 0 – Johan

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