AS/400 - Valor absuluto de un numero

 
Vista:

Valor absuluto de un numero

Publicado por David Barrón (32 intervenciones) el 01/05/2008 18:42:46
Buen Día:
Alguno de ustedes sabe si hay una operacion en los QUERIES que saque el valor absoluto de un número??
Espero su respuesta.
Gracias!
DB
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Valor absuluto de un numero

Publicado por ros (95 intervenciones) el 02/05/2008 09:15:18
ABS(campo)= Devuelve el valor absoluto de (n).
CEIL(campo)=Obtiene el valor entero inmediatamente superior o igual a "n".
TRUNC (numero, campo)= Trunca números para que tengan una cierta cantidad de dígitos de precisión.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Valor absuluto de un numero

Publicado por David Barron (32 intervenciones) el 05/05/2008 02:23:37
Buenas tardes Ros.
Dejame te explico como esta la situcion estoy trabajando con un archivo de transacciones y necesito dos colunas una con el valor real y uan con el valor absoluto para despues hacer operaciones, hasta ahorita lo que estoy haciendo es crear una BD con los valores positivos, despues le adiero los negativos y por ultimo los negativos multiplicados por -1 pero al hacer esto el numero de queries se incrementa demaciado y es lo que no quiro, intente hacerle como me dijiste creando un campo nuevo en Define result fields de la siguiente manera
NDVARABS = ABS(NDVAR) pero me despliega el siguiente mensaje
Operator or function name needed before left parenthesis.
pudieras decirme si estoy haciendo algo mal.
Gracias por la ayuda!
Saludos
David Barron
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Valor absuluto de un numero

Publicado por ros (95 intervenciones) el 05/05/2008 11:11:35
Te paso una sentencia real con resultados, ten mucho cuidado con los grupos de paréntesis, si ves que no lo solucionas, me pasas la sentencia completa y la analizo.

Ojo la combinación de los diferentes mandatos se hace mediante paréntesis como por ejemplo esta sentencia que redondea a dos decimales

SELECT round(( decimal((CANTIDAD_SERVIDA*IMPORTE_BRUTO), 9, 2) ), 2) FROM libreria/lineas_de_albaran

( imp. *cantid.) redondeo
9,7834000 9,78
8,5100000 8,51
,7998000 ,79
10,6100000 10,61
8,5100000- 8,51-
69,4450000 69,44
1,9608000 1,96
6,4700000 6,47
5,6000000 5,60
100,2900000 100,29
24,0300000 24,03
6,4181000 6,41
5,7268000 5,72
2,4685000 2,46
2,6660000 2,66
2,5673000 2,56
7,8278000 7,82
,8970000 ,89
2,8736000 2,87

Sentecia:
SELECT
CANTIDAD_SERVIDA,
IMPORTE_BRUTO,
(CANTIDAD_SERVIDA*IMPORTE_BRUTO) ,
abs(CANTIDAD_SERVIDA*IMPORTE_BRUTO),
ceil(CANTIDAD_SERVIDA*IMPORTE_BRUTO) ,t
runc((CANTIDAD_SERVIDA*IMPORTE_BRUTO) , 2)
,decimal((CANTIDAD_SERVIDA*IMPORTE_BRUTO) , 9, 2)
FROM libreria/lineas_de_albaran

cantidad servida precio de tarifa ( imp. *cantid.) abs
1,000 9,7834 9,7834000 9,7834000
1,000 8,5100 8,5100000 8,5100000
1,000 ,7998 ,7998000 ,7998000
1,000 10,6100 10,6100000 10,6100000
1,000- 8,5100 8,5100000- 8,5100000
5,000 13,8890 69,4450000 69,4450000
2,000 ,9804 1,9608000 1,9608000
1,000 6,4700 6,4700000 6,4700000
2,000 2,8000 5,6000000 5,6000000
100,000 1,0029 100,2900000 100,2900000
1,000 24,0300 24,0300000 24,0300000
1,000 6,4181 6,4181000 6,4181000
2,000 2,8634 5,7268000 5,7268000
1,000 2,4685 2,4685000 2,4685000
2,000 1,3330 2,6660000 2,6660000
1,000 2,5673 2,5673000 2,5673000
1,000 7,8278 7,8278000 7,8278000
10,000 ,0897 ,8970000 ,8970000
4,000 ,7184 2,8736000 2,8736000

CEIL TRUNC DECIMAL
10 9,7800000 9,78
9 8,5100000 8,51
1 ,7900000 ,79
11 10,6100000 10,61
8- 8,5100000- 8,51-
70 69,4400000 69,44
2 1,9600000 1,96
7 6,4700000 6,47
6 5,6000000 5,60
101 100,2900000 100,29
25 24,0300000 24,03
7 6,4100000 6,41
6 5,7200000 5,72
3 2,4600000 2,46
3 2,6600000 2,66
3 2,5600000 2,56
8 7,8200000 7,82
1 ,8900000 ,89
3 2,8700000 2,87
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Valor absuluto de un numero

Publicado por ros (95 intervenciones) el 05/05/2008 11:31:41
Como veo que la cosa no se ve clara, te paso de Nuevo la sentencia del redondeo y sus resultados.

La sentencia dice: toma del resultado un número decimal con nueve enteros y tres decimales y me lo redondeas al mismo numero de enteros y decimales pero redondeado a dos decimales


SELECT (CANTIDAD_SERVIDA*IMPORTE_BRUTO),'<-->', round(( decimal((CANTIDAD_SERVIDA*IMPORTE_BRUTO), 9, 3)
), 2) redondeo FROM libreria/lineas_de_albaran

( imp. *cantid.) <--> REDONDEO
9,7834000 <--> 9,780
8,5100000 <--> 8,510
,7998000 <--> ,800
10,6100000 <--> 10,610
8,5100000- <--> 8,510
69,4450000 <--> 69,450
1,9608000 <--> 1,960
6,4700000 <--> 6,470
5,6000000 <--> 5,600
100,2900000 <--> 100,290
24,0300000 <--> 24,030
6,4181000 <--> 6,420
5,7268000 <--> 5,730
2,4685000 <--> 2,470
2,6660000 <--> 2,670
2,5673000 <--> 2,570
7,8278000 <--> 7,830
,8970000 <--> ,900
2,8736000 <--> 2,870


La sentencia dice: toma del resultado un número redondeado a dos decimales y me lo pasas a un decimal de nueve enteros y dos decimales.

SELECT (CANTIDAD_SERVIDA*IMPORTE_BRUTO),'<-->', decimal(( round((CANTIDAD_SERVIDA*IMPORTE_BRUTO), 2)
), 9, 2) redondeo FROM libreria/lineas_de_albaran


( imp. *cantid.) <--> REDONDEO
9,7834000 <--> 9,78
8,5100000 <--> 8,51
,7998000 <--> ,80
10,6100000 <--> 10,61
8,5100000- <--> 8,51
69,4450000 <--> 69,45
1,9608000 <--> 1,96
6,4700000 <--> 6,47
5,6000000 <--> 5,60
100,2900000 <--> 100,29
24,0300000 <--> 24,03
6,4181000 <--> 6,42
5,7268000 <--> 5,73
2,4685000 <--> 2,47
2,6660000 <--> 2,67
2,5673000 <--> 2,57
7,8278000 <--> 7,83
,8970000 <--> ,90
2,8736000 <--> 2,87
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar