Adapté la réponse la plus populaire par Brann à MySQL pour ceux qui viennent me ressembler.
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
/* Felt trop de temps pour mettre en commentaire */
ROND (num, sf - 1 - FLOOR (log10 (ABS (num))))
- La partie qui fait le travail - utilise la fonction ronde sur le nombre comme d'habitude, mais la longueur à arrondir est calculée à
- ABS assure positif
- LOG10 obtient le nombre de chiffres supérieur à 0 dans le nombre
- FLOOR obtient le plus grand nombre entier inférieur au nombre résultant
- donc toujours arrondit et donne un entier
- sf - 1 - FLOOR (...) donne un nombre négatif
fonctionne parce que ROND (num, -ve num) arrondit à la gauche de la virgule
pour seulement une large ROND (123.456, -1) et ROND (0.00123,4) retourner les réponses demandées ((120, 0,0012)
Cela fonctionne bien, et est beaucoup plus simple que ce que je suis arrivé :-) – Paul
Bien que doit assurer @number n'est pas 0. – Paul
en effet; mis à jour en conséquence. – Brann