Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Formatear un número decimal con SQL y paradox

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Formatear un número decimal con SQL y paradox Responder citando

Tengo un campo de una tabla en paradox con valores decimales. Deseo hacer cálculos con los valores de ese campo pero teniendo en cuenta únicamente tres decimales como máximo. He probado con round(micampo) pero me sale un mensaje diciendo que paradox no soporta esa función. Si alguien conoce la forma de limitar el número de dígitos de un campo tipo number de una tabla en paradox le estaré agradecido. Saludosl
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Una opción puede ser la siguiente

en el DataSet que tienes asociado a la tabla con el campo que necesitas
presiona doble click (TTable, TQuery, TIBDataSet etc)

aparece una ventana en ella usando el boton derecho o utilizando Ctrl + F, agregas todos los campos que necesitas ubica el Campo que requieres y te vas al Inspector de Objetos (F11), ahi existe una propiedad llama "Precision" donde puedes establecer el numero de decimales a usar dentro del campo.

este valor afecta a la salida cada vez que introduzcas o saques el valor del campo

saludos...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

César gracias, tus indicaciones son correctas pero el problema es que necesito formatear el número justo con la sentencia sql puesto que no es lo mismo:
Código:

select sum(cantidad)*0.469

que
Código:

select sum(cantidad)*0.46928

En ambos casos sum(cantidad) devuelve un valor de 318 el cual se multiplica por el siguiente valor. En el primer caso el resultado de la multiplicación es de 149,42, en cambio en el segundo caso el resultado del producto es de 149,23104. Lo que pretendo es que el segundo caso me de el mismo resultado que el primero, para ello necesito coger del multiplicador únicamente los tres primero decimales, en este segundo caso necesito sólamente 0.469 desechando los dos últimos decimales "28", pero necesito hacerlo desde el mismo código SQL ya que tengo ya miles de registros guardados con más de tres decimales. Se que para oracle existen funciones a nivel sql como round() o number format() que permiten hacer esto, pero el problema mio es que trabajo con paradox y no me reconoce esas funciones.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Código:
select sum(cantidad)* ROUND(0.46928,3)


Me comentas que haciendo esto en la consulta te da un error?
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Si, así es, si pongo eso al intentar activar o añadir los campos de la consulta al TQuey me sale un mensaje de error diciendo "Capabylity not supported".
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Revisando tu codigo, me he dado cuenta que funciona perfectamente
es decir

Cita:
registro 1155 de la tabla el valor de preuunitari es de 0,3778635 pues que a la
hora de hacer la consulta ésta lea sólamente 0,377.


efectivamente lee solo 3 decimales, pero al ser redondeado, el valor cambia de 0,3778635 --> 0,378

este ultimo queda de esa manera, ya que las reglas de redondeo son muy claras si el numero siguiente es mayor de 5 entonces se redondea al el numero anterior al entero mas proximo, si el numero es menor o igual a 5, el numero anterior se deja tal y como esta

ejemplo (nota en mex, usamos el punto como separador de decimales)
un ejemplo es el siguiente

1,995 ---> 1,99
1,998 ---> 2,00

en el ultimo de los casos puedes establecer dentro de la opcion

Código:
parameters overrides

DECIMALDIGITS = 3

ENABLE BCD=FALSE
DEFAULT DRIVER=PARADOX
ENABLE SCHEMA CACHE=TRUE
LOCAL SHARE=TRUE
BLOCK SIZE =  32768
FOURDIGITYEAR = TRUE
LEADINGZEROM = TRUE
LEADINGZEROD = TRUE


Del componente del TDataBase que habre tus tablas
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Creo que no nos entendemos Cesar:
Cita:

efectivamente lee solo 3 decimales

Eso no es así, los lee todos y eso es lo que provoca las diferencias en el resultado. Fíjate bien en el primer registro del resultado de la consulta, si multiplicas el número de entradas por el precio no te da lo que se muestra en Importe, ahí está el error, y esto es así porque el precio tiene más de tres decimales, aunque no los mostremos están ahí y la consulta SQL los tiene en cuenta. Si tu has conseguido leer únicamente tres decimales con la consulta SQL te agradecería que me lo explicaras.
Un saludo y gracias otra vez por tu tiempo.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.