在sql中舍入到0.5

时间:2016-12-02 13:28:27

标签: sql oracle plsql numbers decimal

我有号码数据:

123.42
12.54
1.02
2.99

对于每一个我想获得最接近0.5步的数字。所以

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

任何线索? 我正在尝试使用trunc((x-floor(x))*5)/5),却无法获得任何结果。

1 个答案:

答案 0 :(得分:3)

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

这种表达应该是你所描述的。所以功能是:

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

但是看一些例子,你不想要最接近的数字,但最小的数字小于你的价值四舍五入到0.5。您将获得以下内容:

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

如果您希望将小于值的最小数字舍入为0.5,则为:

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