Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   formato en centenas decimales unidades (https://www.clubdelphi.com/foros/showthread.php?t=73066)

amerika111 30-03-2011 01:14:34

formato en centenas decimales unidades
 
Hola que tal lo que pasa es lo siguiente:
tengo un campo char con estos datos 85.12 o tambien con 115.12 como valores y necesito que pasarlo a este 008512 o en el caso 011512 nose si tendria que hacerlo en un if o si hay una funcion para hacerlo.....

guillotmarc 30-03-2011 10:16:22

No hay ninguna función, así que tienes que usar las funciones normales de conversión de número a cadena (cast), pero separando primero la parte entera de la parte decimal.

Sería algo así :

cast(cast(NUMERO as integer) as varchar(20)) || cast(cast((NUMERO - cast(NUMERO as integer)) * 100 as integer) as varchar(2))

Saludos.

amerika111 30-03-2011 20:13:16

Cita:

Empezado por guillotmarc (Mensaje 395067)
No hay ninguna función, así que tienes que usar las funciones normales de conversión de número a cadena (cast), pero separando primero la parte entera de la parte decimal.

Sería algo así :

cast(cast(NUMERO as integer) as varchar(20)) || cast(cast((NUMERO - cast(NUMERO as integer)) * 100 as integer) as varchar(2))

Saludos.

Y esto lo ingresaria en un procedimiento o como puedo hacer una prueba

amerika111 30-03-2011 20:23:56

Cita:

Empezado por guillotmarc (Mensaje 395067)
No hay ninguna función, así que tienes que usar las funciones normales de conversión de número a cadena (cast), pero separando primero la parte entera de la parte decimal.

Sería algo así :

cast(cast(NUMERO as integer) as varchar(20)) || cast(cast((NUMERO - cast(NUMERO as integer)) * 100 as integer) as varchar(2))

Saludos.

La he probado de esta manera y me aparece error Dynamic SQL Error expression evaluation not supported

UPDATE A_tabla SET
SALARIO=cast(cast(SALARIO as integer) as VARchar(20)) || cast(cast((SALARIO - cast(SALARIO as integer)) * 100 as integer) as VARchar(2))

guillotmarc 30-03-2011 22:12:13

Hola.

Lo he probado y no he tenido ese error (¿ qué versión de Firebird utilizas ?).

Aunque he visto otro problema, y es que un CAST AS INTEGER redondea enteros en lugar de coger solo la parte entera. Con lo que no sirve para lo que queríamos hacer.

guillotmarc 30-03-2011 22:13:23

Hay otra solución mucho más sencilla. Simplemente multiplica el número por 100.

Saludos.

amerika111 31-03-2011 01:54:06

Cita:

Empezado por guillotmarc (Mensaje 395138)
Hay otra solución mucho más sencilla. Simplemente multiplica el número por 100.

Saludos.


oooo si solo multiplicando por 100 y agregando ceros al principio, si eso queria gracias....
Código SQL [-]
select lpad((cast(lpad((numero*100), 6, '0') as integer)),6,'0') from A_tabla


La franja horaria es GMT +2. Ahora son las 02:04:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi