FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Consulta con mas de 4 decimales
Hola.
Tengo una consulta en Firebird 2.5 en la cual me trae el costo (12987.0000) el precio (15516.8676), al momento de dividirlos me retorna el valor de 1.1948 cuando necesito que me muestre 1.194829 la consulta la estoy realizando así:
Que puedo hacer, ya intente con un CAST( AS DECIMAL(4,6)), generando error -842. Gracias! |
#2
|
||||
|
||||
Prueba :
select cast(precio as numeric(15,6)) / costo from producto Saludos
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#3
|
|||
|
|||
Gracias guillotmarc, pero siguen apreciando solo 4 cifras después del punto. Alguna otra idea...
|
#4
|
||||
|
||||
Hola.
El problema probablemente sea la representación que muestra tu programa Delphi, estará redondeando en el momento de mostrar.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#5
|
|||
|
|||
Hola, gracias por tu interés. la consulta la estoy realizando directamente en firebird utilizando la herramienta EMS Intebase Manager.
|
#6
|
||||
|
||||
De que tipo de dato son los campos PRECIO y COSTO?
|
#7
|
|||
|
|||
son decimal(18,4).
|
#8
|
||||
|
||||
Hola.
Quizás sea la visualización del EMS Interbase Manager quien te redondea el resultado. Prueba esto, para confirmarlo : select cast(cast(precio as numeric(15,6)) / costo as varchar(50)) from producto Si el problema no está en un redondeo en los componentes de presentación en pantalla, entonces prueba de cambiar el tipo a todos los operandos (en principio solo debería ser necesario hacerlo en el primero) : select cast(precio as numeric(15,6)) / cast(costo as numeric(15,6)) from producto NOTA: Aunque lo acabo de probar en una base de datos Firebird 2.0, y a mi me funciona correctamente solo cambiando el tipo en el primer operando, tal y como te recomendé en el mensaje anterior. Así que aunque el EMS Interbase Manager te muestre solo 4 caracteres, en tu aplicación deberías poder mostrar correctamente los 6 caracteres que en realidad devuelve la consulta. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 21-11-2011 a las 22:46:37. |
#9
|
||||
|
||||
Creo que es ahí el detalle. Los campos no son de DOUBLE PRECISION. Necesitas convertir a DOUBLE PRECISION los campos COSTO y PRECIO al momento de hacer la consulta: Por ejemplo;
Puedes leer más al respecto en http://www.firebirdfaq.org/faq79/ Saludos, Chris |
#10
|
|||
|
|||
Bueno aun nada, tratare de ser mas especifico.
La primera parte del select hace referencia al precio : (cast(costo as NUMERIC(15,6)) + cast((cast(costo as NUMERIC(15,6)) * (pcj_venta1/100)) as numeric(15,6))) La segunda al costo : cast(costo as NUMERIC(15,6)). El porcentaje de venta pcj_venta1 no es mas que una variable de tipo decimal(4,4). El resultado luego de realizar la consulta donde el costo es 12987 y precio es 15516.8876 es el siguiente... 1.1284. Ahora el por que. requiero hacer esto... bueno sucede que el cliente el margen de utilidad esta dado por ((precio/costo)-1))*100 donde reemplazando me dará una utilidad de 12.8449, pues bien, ahora el cliente compro no a 12987 sino a 11000 pero se requiere que el precio de venta se mantenga por lo tanto calculo el precio actual y lo divido entre el nuevo costo para actualizar el margen de utilidad en la tabla. Espero quizás me entiendan el porque de la necesidad de los decimales ya que con solo los cuatro del resultado 1.1284 al restarle 1 y multiplicarlo por 100 me da 12.84 donde el precio se vera afectado... como enrredado cierto! |
#11
|
||||
|
||||
Prueba con lo que te dijo Chris (double precision)
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H" |
#12
|
|||
|
|||
Efectivamente... gracias a todos. Ya funciono la cuestión estaba en hacerle cast a pcj_venta1 era lo único y listo.. claro esta utilice el double precisión. Por ultimo habrá mucha diferencia en utilizar double precision y decimal o numeric?
|
#13
|
||||
|
||||
Resp
No creo que deba hacer ningun cast. Pero eso es el resultado de la division. El manejador es tan inteligente que expande la cantidad de decimales tanto numerador como denominador. Osea 8 decinames.
El resultado de la division es 11948. No entendo como quieres que te de mas decimales si eso es lo que da lo he probado con varias calculadoras y no me da diferente.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
#14
|
||||
|
||||
Cita:
Pruébalo. NOTA : ¿ Que crees que haría el motor de Firebird si el resultado de una operación es un número irracional ?, ¿ devolvernos un nº infinito de decimales ?.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#15
|
|||
|
|||
Lo probare, muchas gracias a todos
|
#16
|
||||
|
||||
resp
Por que lo prove es que lo digo
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
#17
|
||||
|
||||
Si, tienes razón, disculpa.
Lo acabo de probar, y en efecto, Firebird ya devuelve siempre un valor correcto con 8 decimales. El valor que devolvía Firebird en la pregunta original ya era el valor correcto de verdad, y no el valor que equivocadamente estaba esperando el usuario. Todas las respuestas que se han dado han sido correctas en todo momento, pero innecesarias. Como bien dices, en esta ocasión no hay ninguna necesidad de forzar los tipos de datos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Decimales | eduardo360 | Varios | 1 | 19-02-2008 02:29:28 |
Decimales en una consulta (TQUERY ) a paradox | Wonni | Conexión con bases de datos | 6 | 14-11-2006 21:22:33 |
Decimales | Luis Alberto | Varios | 1 | 19-05-2006 16:40:25 |
decimales | jfontane | Varios | 2 | 24-06-2003 05:35:19 |
Decimales | alexisns | Conexión con bases de datos | 2 | 22-06-2003 21:45:40 |
|