7
votes

Fonction ronde SQL

rond (45.923, -1) donne un résultat de 50. Pourquoi est-ce? Comment cela est calculé?

(désolé gars, je me suis trompé avec une version antérieure de cette question suggérant que la valeur était 46)


3 commentaires

Il donne 50 sur mysql 5.0.67-0ubuntu6, comme décrit dans dev.mysql.com/doc/refman/5.0/fr/... - Qu'est-ce que tu utilises?


mec ... Je sais ça mais pourquoi? Comment ça est calculé


Peut-être encore plus d'informations sur ce que vous essayez de faire est en ordre? Ceci est une information incorrecte sur elle est propre.


7 Réponses :


0
votes

Ce n'est pas pour moi sur MySQL:

mysql> select round(45.923,-1);
+------------------+
| round(45.923,-1) |
+------------------+
|               50 |
+------------------+
1 row in set (0.00 sec)


2 commentaires

Vous dites "ça ne" pas "mais c'est le même résultat que OP


@Tillkkolditz OP a modifié la question, précédemment OP par erreur donnée résultat de 46



0
votes

et sur SQL Server 2005: xxx

Quelle base de données utilisez-vous cela?


0 commentaires

4
votes

rond (748.58, -1) 750.00

Le deuxième paramètre: Lenght, est la précision à laquelle numeric_expression doit être arrondie. La longueur doit être une expression de type Tinyint, Smallint ou Int. Lorsque la longueur est un nombre positif, numeric_expression est arrondi au nombre de positions décimales spécifiées par la longueur. Lorsque la longueur est un nombre négatif, numeric_expression est arrondi sur le côté gauche du point décimal, comme spécifié par longueur.

de


0 commentaires

14
votes

La fonction ronde SQL () arrondit un numéro à une précision ...

Par exemple:

rond (45,65, 1) donne résultat = 45,7

rond (45,65, -1) donne résultat = 50

Parce que la précision dans ce cas est calculée à partir du point décimal. Si positif, il faut considérer le numéro de côté droit et l'arrondi vers le haut s'il est> = 5, et si <= 4, alors rond est vers le bas ... et si c'est négatif, la précision est calculée pour le côté gauche de la décimale point ... si c'est> = 5

Par exemple rond (44.65, -1) donne 40 Mais rond (45,65, -1) donne 50 ...


2 commentaires

Dans votre ronde de questions (45.923, -1) donnera 50 .. Cependant, la ronde (44.923, -1) cédera à 40.


Simillarly rond (45.923, -2) donnera .00



2
votes

On s'attend à ce que 50.

rond (45.923, 0) => 46

EXPL: Le dernier chiffre non décimal est arrondi (5), la désacation est basée sur le chiffre suivant (9) 9 est dans la moitié de la moitié, Ergo 5 est arrondi jusqu'à 6

rond (45.923, 1) => 45,9

EXPL: Le premier chiffre décimal est arrondi (9), la désagion est basée sur le chiffre suivant (2). 2 est dans la moitié inférieure, Ergo 9 reste 9

Votre cas: rond (45.923, 1-) => 45,92

EXPL: le chiffre de seconde-Dernier chiffre non décimal est arrondi (4), la descente est basée sur le chiffre suivant (5) 5 est dans la moitié supérieure, Ergo 4 est arrondi jusqu'à 5, le reste des digistes est rempli de 0s


0 commentaires

2
votes

Quant à comment, commencez par envisager comment vous feriez un flotteur (positif) à l'entier le plus proche. Jeter un flotteur sur un intompant le tronque. L'ajout de 0,5 à un flotteur (positif) incrémentera la partie entière précisément lorsque nous voulons arrondir (lorsque la partie décimale> = 0,5). Ceci donne ce qui suit: xxx

pour ajouter prise en charge du paramètre de précision, note que (par exemple, rond (123456.789, -3) ) Ajout de 500 et tronquage dans le Des milliers de personnes sont essentiellement la même chose que l'ajout de 0,5 et l'arrondissement de l'entier le plus proche, c'est que le point décimal est dans une position différente. Pour déplacer le point de radix autour, nous avons besoin d'opérations de décalage à gauche et de droite, équivalentes à la multiplication par la base élevée à la quantité de changement de vitesse. C'est-à-dire que 0x1234 >> 3 est identique que 0x1234 / 2 ** 3 et 0x1234 * 2 ** - 3 dans la base 2. Dans la base 10: xxx

pour rond (123456.789, -3) , cela signifie que nous pouvons faire la multiplication ci-dessus pour déplacer le point décimal, ajouter 0,5, tronque, puis effectuez la multiplication opposée pour déplacer le point décimal. xxx

arrondissement en ajoutant 0.5 et tronquage fonctionne bien pour des nombres non négatifs, mais il arrondit le mauvais manière pour les nombres négatifs. Il y a quelques solutions. Si vous avez un signe efficace () fonction (qui renvoie -1, 0 ou 1, selon que un numéro est <0, == 0 ou> 0, respectivement), vous pouvez: xxx

sinon, il y a: xxx


0 commentaires

0
votes

Une chose est dans la fonction ronde, le premier paramètre est le numéro et le deuxième paramètre est l'index de précision du côté décimal.

Cela signifie que si l'indice de précision est égal à 0 il est à la première décimale, -1 signifie avant le Decimal premier numéro, 1 signifie côté droit de la première décimale, c'est-à-dire une deuxième décimale

par exemple xxx


1 commentaires

Cette réponse semble très similaire à la réponse acceptée; Y a-t-il quelque chose de différent que vous voulez mettre en évidence sur l'OP? Sinon, il vaut mieux voter une réponse déjà existante ou ajouter un commentaire à celui qui peut bénéficier d'un contexte supplémentaire.