ब्रैन द्वारा MySQL द्वारा मेरे जैसे आने वाले लोगों के लिए सबसे लोकप्रिय उत्तर को अनुकूलित किया।
CREATE FUNCTION `sfround`(num FLOAT, sf INT) # creates the function
RETURNS float # defines output type
DETERMINISTIC# given input, will return same output
BEGIN
DECLARE r FLOAT; # make a variable called r, defined as a float
IF(num IS NULL OR num = 0) THEN # ensure the number exists, and isn't 0
SET r = num; # if it is; leave alone
ELSE
SET r = ROUND(num, sf - 1 - FLOOR(LOG10(ABS(num))));
/* see below*/
END IF;
RETURN (r);
END
/* बहुत लंबा टिप्पणी में डालने के लिए */
ROUND (संख्या, एस एफ - 1 - मंजिल (LOG10 (एबीएस (संख्या)))) लगा
- बात यह है कि काम करता है - सामान्य रूप से नंबर पर ROUND फ़ंक्शन का उपयोग करता है, लेकिन लंबाई गणना की जाती है पूर्ण होना
- एबीएस सुनिश्चित करता है सकारात्मक
- LOG10 संख्या
में अंकों की संख्या 0 से अधिक हो जाता है
- मंजिल सबसे बड़ा पूर्णांक परिणामी संख्या
- तो हमेशा नीचे दौर की तुलना में छोटे हो जाता है और एक पूर्णांक
- sf देता है - 1 - एक ऋणात्मक संख्या
काम करता है क्योंकि ROUND (संख्या देता है मंजिल (...), -ve संख्या) दशमलव बिंदु
के बाईं सिर्फ एक एक बंद के लिए, ROUND के दौर (123.456, -1) और ROUND (0.00123,4) अनुरोध किया जवाब ((120, 0.0012 वापसी)
स्रोत
2016-07-20 09:39:12
यह अच्छी तरह से काम करता है, और जो कुछ मैं आया था उससे कहीं अधिक सरल है :-) – Paul
हालांकि यह सुनिश्चित करना चाहिए कि @ नम्बर 0 – Paul
वास्तव में नहीं है; तदनुसार अद्यतन किया गया। – Brann