在 sql 中四舍五入到 0.5

Tiz*_*ica 0 sql oracle plsql numbers decimal

我有数字数据:

123.42
12.54
1.02
2.99
Run Code Online (Sandbox Code Playgroud)

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

func(123.42)=123.0
func(12.54)=12.5
func(1.02)=1.0
func(2.99)=2.5
Run Code Online (Sandbox Code Playgroud)

有什么线索吗?我正在尝试,trunc((x-floor(x))*5)/5)但什么也得不到。

Kac*_*per 5

val := round(val*2) / 2;
Run Code Online (Sandbox Code Playgroud)

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

create or replace function func(val number) return number
is
begin 
  return round(val*2) / 2;
end;
Run Code Online (Sandbox Code Playgroud)

但是查看示例,您不想要最接近的数字,而是希望小于您的值的最高数字四舍五入到 0.5。您将通过以下方式获得:

create or replace function func(val number) return number
is
begin 
  return floor(val*2) / 2;
end;
Run Code Online (Sandbox Code Playgroud)

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

create or replace function func(val number) return number
is
begin 
  return ceil(val*2) / 2;
end;
Run Code Online (Sandbox Code Playgroud)