2012-09-13 7 views
7

मैंने यह सरल कार्य किया है, और परिणाम 0.5मेरे MySQL फ़ंक्शन पूरी तरह से दशमलव को गुणा करते समय गणित परिशुद्धता खो देता है। ऐसा क्यों है?

के बजाय 1 लौटाता है मैंने क्या गलत किया?

DELIMITER // 

DROP FUNCTION IF EXISTS test_decimal // 

CREATE FUNCTION test_decimal(input DECIMAL) 
    RETURNS DECIMAL 
BEGIN 
    SET @_credit = 0.5; 
    RETURN input * @_credit; 
END // 

DELIMITER ; 

SELECT test_decimal(1); 
+2

यदि '@ _credit' * दशमलव के रूप में लिखा गया * के साथ-साथ क्या होता है? (यानी, इसे मौका से कुछ और के रूप में टाइप किया जा सकता है?) –

उत्तर

9

क्योंकि आप निर्दिष्ट नहीं किया precision और scale है यही कारण है कि यह मूल्य गोलाई है। सटीक मानों के लिए संग्रहीत महत्वपूर्ण अंकों की संख्या का प्रतिनिधित्व करता है, और पैमाने दशमलव बिंदु के बाद संग्रहीत अंकों की संख्या का प्रतिनिधित्व करता है। डिफ़ॉल्ट रूप से, परिशुद्धता का मान 10 है और पैमाने का मान 0 है। तो, RETURNS DECIMALRETURNS DECIMAL(10,0) जैसा ही है। यदि स्केल 0 है, DECIMAL मानों में कोई दशमलव बिंदु या fractional भाग नहीं है। अपने फ़ंक्शन में निर्दिष्ट करने का प्रयास करें।

RETURNS DECIMAL(5,2) -- 999.99 

DECIMAL, NUMERIC

SQLFiddle Sample

+0

बहुत उपयोगी, धन्यवाद –

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