On Feb 10, 10:44 am, Andrej Hopko <ado.ho...@gmail.com> wrote:
> Hi,
> just simple suggestion - what about dividing number by 25 (which is step
> for your ROUND), rounding the decimal to nearest integer (standard ROUND
> function should by sufficient) and then multiplying integer back with 25
>      - the solution on level of two years programming experience at high
> school :D
>
> hope I was of some help
>
> btw. although oracle has ROUND with second paramter - as a grade of
> ROUND, it works only for integer grades of 10 to round:
>
> SELECT  ROUND(113.34,-1.5) c1
>        , ROUND(113.34,-LOG(10, 25)) c2
>        , ROUND(113.34,-1.5) c2
>        , ROUND(113.34,-2) c2
> FROM    DUAL
> ;
>
> C1                     C2                     C2                     C2
> ---------------------- ---------------------- ----------------------
> ----------------------
> 110                    110                    110                    100
>
> I found this interesting news :)
>
> best regards
>      hoppo
>
> On 10. 2. 2012 18:13, swaroop gowda wrote:
>
>
>
> > Hi All,
> > I have total amount like 110.01, 113.34, 126.01, 145.54, 155.01 etc
> > but I need to round this 100 or 125 or 150 etc.
>
> > Please find my requirement below,
> > 1) I need to round to 100 if the total is between 100 to 112.
> > 2) I need to round to 125 if the total is between 113 to 125.
> > 3) I need to round to 125 if the total is between 116 to 137.
> > 4) I need to round to 150 if the total is between 138 to 150.
> > 5) I need to round to 150 if the total is between 151 to 167.
> > 5) I need to round to 200 if the total is between 168 to 200.
>
> > You help is greatly appreciated.
> > --
> > Thanks & Regards
> > Swaroop Thailuru Swamy
> > Ph: 713-392-1571
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Oracle PL/SQL" group.
> > To post to this group, send email to Oracle-PLSQL@googlegroups.com
> > To unsubscribe from this group, send email to
> > oracle-plsql-unsubscr...@googlegroups.com
> > For more options, visit this group at
> >http://groups.google.com/group/Oracle-PLSQL?hl=en- Hide quoted text -
>
> - Show quoted text -

I will agree this problem can be solved outside of PL/SQL and is
probably better suited to one of the more generic Oracle newsgroups.
However solutions can be offered using both:

SQL> create table round_amt(
  2          amt     number(9,2)
  3  );

Table created.

SQL>
SQL> insert all
  2  into round_amt
  3  values(110.25)
  4  into round_amt
  5  values(120.25)
  6  into round_amt
  7  values(113.25)
  8  into round_amt
  9  values(117.25)
 10  into round_amt
 11  values(116.25)
 12  into round_amt
 13  values(190.25)
 14  into round_amt
 15  values(180.25)
 16  into round_amt
 17  values(160.25)
 18  into round_amt
 19  values(150.25)
 20  into round_amt
 21  values(200.25)
 22  select * From dual;

10 rows created.

SQL>
SQL> commit;

Commit complete.

SQL>
SQL> --
SQL> -- Straight SQL solution
SQL> --
SQL>
SQL> select amt,
  2         case when trunc(amt) between 110 and 112 then 110
  3              when trunc(amt) between 113 and 137 then 125
  4              when trunc(amt) between 138 and 167 then 150
  5              when trunc(amt) between 168 and 200 then 200 end
rounded_amt
  6  from round_amt;

       AMT ROUNDED_AMT
---------- -----------
    110.25         110
    120.25         125
    113.25         125
    117.25         125
    116.25         125
    190.25         200
    180.25         200
    160.25         150
    150.25         150
    200.25         200

10 rows selected.

SQL>
SQL> --
SQL> -- PL/SQL solution
SQL> --
SQL>
SQL> declare
  2          cursor get_amt is
  3          select amt, trunc(amt) t_amt
  4          from round_amt;
  5  begin
  6          for i in get_amt loop
  7                  if i.t_amt between 100 and 112 then
  8                          dbms_output.put_line(i.amt||' rounded is
100');
  9                  elsif i.t_amt between 113 and 137 then
 10                          dbms_output.put_line(i.amt||' rounded is
125');
 11                  elsif i.t_amt between 138 and 167 then
 12                          dbms_output.put_line(i.amt||' rounded is
150');
 13                  elsif i.t_amt between 168 and 200 then
 14                          dbms_output.put_line(i.amt||' rounded is
200');
 15                  else
 16                          dbms_output.put_line(i.amt||' is out of
range');
 17                  end if;
 18
 19          end loop;
 20
 21  end;
 22  /
110.25 rounded is 100
120.25 rounded is 125
113.25 rounded is 125
117.25 rounded is 125
116.25 rounded is 125
190.25 rounded is 200
180.25 rounded is 200
160.25 rounded is 150
150.25 rounded is 150
200.25 rounded is 200

PL/SQL procedure successfully completed.

SQL>

David Fitzjarrell

-- 
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en

Reply via email to