当第三个十进制数字大于5时,我希望将值舍入到小数点后2位:
<form action="/settings/create_car_service" accept-charset="UTF-8" data-remote="true" method="get">
我想在下面做
39.956 should be round off to 39.96,
35.665 should be round off to 35.66 ,
39.997 should be round off to 40.00 ,
56.684 should be round off to 56.68.
但是对于边界情况,例如39.897和39.997,它不起作用。
答案 0 :(得分:2)
也许你只需要这个:
SQL> with test(num) as (
2 select 39.956 from dual union all
3 select 35.665 from dual union all
4 select 39.997 from dual union all
5 select 56.684 from dual
6 )
7 select num, round(num -0.001, 2)
8 from test;
NUM ROUND(NUM-0.001,2)
---------- ------------------
39,956 39,96
35,665 35,66
39,997 40
56,684 56,68
答案 1 :(得分:0)
Aleksej的解决方案可以正常工作,并且可能是最有效的如果事先知道输入数字最多有三位小数。
问题可以概括,如下:圆38.445下降到38.44;然而,回合38.44503至38.45。 (也就是说,如果在第三个小数位的“5”之后有非零数字,则向上舍入。)
在下面的查询可以在一般情况下使用。结果与“通常”舍入不同的唯一时间是输入数字恰好有三个非零小数位,第三个小数位数为5.这正是解决方案的读取方式。
with inp (n) as (select 38.445 from dual union all select 38.44503 from dual)
select n,
round(n,2) - case when n = round(n, 3) and mod(1000*n, 10) = 5
then 0.01
else 0 end as custom_rounded
from inp;
N CUSTOM_ROUNDED
---------- --------------
38.445 38.44
38.44503 38.45