(désolé gars, je me suis trompé avec une version antérieure de cette question suggérant que la valeur était 46) em> p> rond (45.923, -1) code> donne un résultat de 50. Pourquoi est-ce? Comment cela est calculé? P>
7 Réponses :
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)
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
et sur SQL Server 2005: Quelle base de données utilisez-vous cela? p> p>
rond (748.58, -1) 750.00 P>
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. P>
de P>
La fonction ronde SQL () arrondit un numéro à une précision ... P>
Par exemple: P>
rond (45,65, 1) donne résultat = 45,7 p>
rond (45,65, -1) donne résultat = 50 p>
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 p>
Par exemple rond (44.65, -1) donne 40 Mais rond (45,65, -1) donne 50 ... p>
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
On s'attend à ce que 50. P>
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 p>
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 p>
Votre cas: strong>
rond (45.923, 1-) => 45,92 p>
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 p>
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: pour ajouter prise en charge du paramètre de précision, note que (par exemple, pour 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 sinon, il y a: p> rond (123456.789, -3) code>) 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 code> est identique que
0x1234 / 2 ** 3 code> et
0x1234 * 2 ** - 3 code> dans la base 2. Dans la base 10: p>
rond (123456.789, -3) code>, 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. P>
efficace () CODE> fonction (qui renvoie -1, 0 ou 1, selon que un numéro est <0, == 0 ou> 0, respectivement), vous pouvez: p>
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 p>
par exemple p>
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.
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.