2016-12-02 4 views
0

Ich habe Zahldaten:Runde bis 0,5 in SQL

123.42 
12.54 
1.02 
2.99 

Für jeden ich die nächste Nummer zu einem 0,5 Schritt erhalten möchten. Also

func(123.42)=123.0 
func(12.54)=12.5 
func(1.02)=1.0 
func(2.99)=2.5 

Irgendwelche Hinweise? Ich versuche es mit einer trunc((x-floor(x))*5)/5) aber kann nichts bekommen.

Antwort

3
val := round(val*2)/2; 

Eine solche Aussage sollte sein, was Sie in Frage gestellt haben. So Funktion ist:

create or replace function func(val number) return number 
is 
begin 
    return round(val*2)/2; 
end; 

Aber ein Blick auf Beispiele, die Sie nicht am nächsten Nummer wollen, aber höchste Zahl kleiner als Ihr Wert auf 0,5 gerundet. Und das wird Sie erhalten mit:

create or replace function func(val number) return number 
is 
begin 
    return floor(val*2)/2; 
end; 

Wenn Sie als Wert die kleinste Zahl größer möchte auf 0,5 gerundet, es wäre:

create or replace function func(val number) return number 
is 
begin 
    return ceil(val*2)/2; 
end; 
+0

Falsch. Runde (123.42 * 2)/2 => Ausgabe: 123.5, brauche ich eine 123.0 –

+0

@ AntonioCalì Sie sagten die nächste Nummer, so ist es richtig. – Kacper

+0

@ AntonioCalì Wenn Sie die nächstkleinere Zahl haben möchten, ersetzen Sie 'round' mit' floor'. Wenn Sie mit "Ceil" am nächsten sein möchten. – Kacper