2017-06-22 3 views
2

ich eigentümlich Anforderung haben, wo ich bis Zahlen in unten Mode runden möchten -Modified ROUND UP-Funktion in Oracle

1.14 to 1.5 
    1.6 to 2 
    0.8 to 1 
    7.5 to 7.5 

, die nächste Vielfache von 0,5 ist.

Gibt es einen Weg, dies zu erreichen?

Mit freundlichen Grüßen

+0

OK - Sie müssen also nicht auf die nächste 0,5, sondern auf ** ** ** auf die nächste 0,5 runden. Das hat MT0 gezeigt. – mathguy

+0

Dies ist keine "Rundung" - Sie möchten eine Decke. –

Antwort

6

Wenn Sie auf den nächsten 0,5 aufrunden wollen:

Testdaten:

CREATE TABLE your_table (value) AS 
    SELECT 1.14 FROM DUAL UNION ALL 
    SELECT 1.6 FROM DUAL UNION ALL 
    SELECT 0.8 FROM DUAL UNION ALL 
    SELECT 7.5 FROM DUAL; 

Abfrage :

SELECT value, 
     CEIL(value * 2)/2 AS rounded_value 
FROM your_table 

Ausgang:

SIGN(value) * CEIL(ABS(value)*2)/2 
:

VALUE ROUNDED_VALUE 
----- ------------- 
1.14   1.5 
    1.6    2 
    0.8    1 
    7.5   7.5 

Wenn Sie von Null auf 0,5 (nicht dasselbe für negative Zahlen) abzurunden weg wollen, können Sie

+0

gerundet werden sollte Perfekt! ... Vielen Dank für sofortige Lösung :) –

0

Hier ist eine Möglichkeit:

select floor(val * 2 + 1)/2 
+3

schlägt es für 7,5 bis 7,5 –

+0

@AnirudhD fehl. . . Wenn Sie den Bearbeitungsverlauf lesen, werden Sie feststellen, dass die Frage nicht beantwortet wurde, als ich sie beantwortete. Der Downvote ist völlig unberechtigt und unhöflich. –

+2

7,5 war nicht im ursprünglichen Umfang. Aber es scheint offensichtlich (zumindest für mich), dass es nicht auf 8 –