2010-12-17 5 views
1

ich diesen Code bin mit dem Dezimalwert auf das nächste Vielfache von 25 dh abzurunden, wenn der Wert 33.60 ist es sollte rund um 33,50Oracle Rundung Ausgabe

create or replace 
PROCEDURE   "TEST1" (PQUERY IN VARCHAR2) as 
prNspValue number(14,2) :=''; 
p_percentage_Value number(4,2) :=''; 
    begin 
    prNspValue:=33.60; 
    dbms_output.put_line(prNspValue); 
    p_percentage_Value:=substr(prNspValue,instr(prNspValue,'.')+1,length(prNspValue)); 
    dbms_output.put_line(p_percentage_value); 
    p_percentage_Value:=p_percentage_Value-mod(p_percentage_Value,25); 
    dbms_output.put_line(p_percentage_value); 
    if(p_percentage_Value!=0)then 
    prNspValue:=substr(prNspValue,1,instr(prNspValue,'.'))+p_percentage_Value/100; 
    else 
    prNspValue:=substr(prNspValue,1,instr(prNspValue,'.')); 
    end if; 
dbms_output.put_line(prNspValue);  
end; 

aber das Problem ist, wenn der Wert 33,60 wird es als 33,6 genommen. also rundet es auf 33.0 ab. Wie kann ich diesen Code korrigieren?

Antwort

2

Sie die Rundenfunktion direkt FLOOR(your_number*4)/4 verwenden können:

SQL> WITH my_data AS (
    2  SELECT 33.00 num FROM dual 
    3  UNION ALL SELECT 33.10 FROM dual 
    4  UNION ALL SELECT 33.20 FROM dual 
    5  UNION ALL SELECT 33.30 FROM dual 
    6  UNION ALL SELECT 33.40 FROM dual 
    7  UNION ALL SELECT 33.50 FROM dual 
    8  UNION ALL SELECT 33.60 FROM dual 
    9  UNION ALL SELECT 33.70 FROM dual 
10  UNION ALL SELECT 33.80 FROM dual 
11  UNION ALL SELECT 33.90 FROM dual 
12 ) SELECT num, 
13   floor (num * 4)/4 rounded 
14  FROM my_data; 

     NUM ROUNDED 
---------- ---------- 
     33   33 
     33,1   33 
     33,2   33 
     33,3  33,25 
     33,4  33,25 
     33,5  33,5 
     33,6  33,5 
     33,7  33,5 
     33,8  33,75 
     33,9  33,75 

10 rows selected 
+0

waht jemals der Fall i runden möchten down..ie wenn seine 33.9 es 33,75 etc geben sollte .. – Andromeda

+0

@jasim: Sie 'Boden verwenden 'statt' rund' zum abrunden (Ich habe meine Antwort aktualisiert) –