| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 06 May, 2006 9:32 pm Asunto: Formatear un número decimal con SQL y paradox |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 07 May, 2006 12:46 am Asunto: |
|
|
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... _________________
 |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Dom 07 May, 2006 7:12 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 07 May, 2006 7:50 am Asunto: |
|
|
| Código: | select sum(cantidad)* ROUND(0.46928,3) |
Me comentas que haciendo esto en la consulta te da un error? _________________
 |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Dom 07 May, 2006 11:20 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 07 May, 2006 11:59 pm Asunto: |
|
|
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 _________________
 |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 08 May, 2006 8:01 am Asunto: |
|
|
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 |
|
 |
|