Tengo datos numéricos:

123.42
12.54
1.02
2.99

Para cada uno quiero obtener el número más cercano a un paso de 0.5. Entonces

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

¿Alguna pista? Estoy intentando con un trunc((x-floor(x))*5)/5) pero no puedo obtener nada.

0
Tizianoreica 2 dic. 2016 a las 16:28

1 respuesta

La mejor respuesta
val := round(val*2) / 2;

Tal expresión debería ser la que describió en cuestión. Entonces la función es:

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

Pero al mirar los ejemplos, no desea el número más cercano sino el número más alto más pequeño que su valor redondeado a 0.5. Y esto lo obtendrás con:

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

Si desea que el número más pequeño sea mayor que el valor redondeado a 0,5, sería:

create or replace function func(val number) return number
is
begin 
  return ceil(val*2) / 2;
end;
5
Kacper 3 dic. 2016 a las 16:10
Incorrecto. round (123.42 * 2) / 2 => salida: 123.5, necesito 123.0
 – 
Tizianoreica
2 dic. 2016 a las 16:34
Dijiste el número más cercano así que es correcto.
 – 
Kacper
2 dic. 2016 a las 16:35
Si desea el número más pequeño más cercano, reemplace round con floor. Si quieres más cerca más alto con ceil.
 – 
Kacper
2 dic. 2016 a las 16:35