2010-09-13 6 views
1

Je dois arrondir une décimale dans une requête sql sur Oracle 10g au nombre pair le plus proche. Si le nombre est pair, il doit être retourné. Si le nombre est impair, le nombre pair suivant devrait être retourné.Comment arrondir une décimale au nombre pair le plus proche en SQL?

Voici ce que je veux: 8,05 devrait retourner 8,06, 3,48 doit retourner 3,48

Comment puis-je faire cela?

Merci, Andrew

+0

Les concepts «pair» et «impair» ne s'appliquent qu'aux entiers; 8.06 n'est pas un "nombre pair" en d'autres termes. Ainsi, pour obtenir l'effet que vous voulez, vous pouvez mettre la valeur à l'échelle en un entier puis masquer le bit bas, puis le redimensionner. Je ne connais pas Oracle SQL donc je ne sais pas comment le faire ou si c'est même possible dans une expression simple. – Pointy

+0

Toujours 2 décimales? – gbn

+0

Quelle est la logique derrière cette opération 8.05 ~ 8.06? Do 8.03 devrait être 8.04 ou peut-il être 8.06? –

Répondre

7

Si vous souhaitez arrondir par exemple au deuxième chiffre décimal pair, vous pouvez faire quelque chose comme ça: select round(3.43/0.02, 0) * 0.02; qui produira 3.44.

Ceci peut être étendu comme vous le souhaitez: par ex. le premier chiffre décimal qui est multiple de 3: select round(3.5452234/0.3, 0) * 0.3; donnera 3.6.

+0

+1 pour me rappeler de la réponse classique – gbn

+0

Mais pour cette solution le 3,48 est 3,4 pas 3,48 comme en question. –

+0

sélectionner tour (3,48/0,02, 0) * 0,02; # => 3.48 –

0

Je ne comprends vraiment pas la logique de l'arrondissement incorrect des nombres. En outre, cela ne peut pas facilement parce que vous n'avez pas affaire à des entiers. Cependant, si vous en avez vraiment besoin, je suggère de suivre quelque chose comme ce pseudo-code.

if ((num/2) * 2 = num) { 
    return // number is even 
    } 
else { 
    num = num + .01 // this assumes you are only working with two decimal points. 
} 
Questions connexes