![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Cita:
Otro sistema de codificación, denominado "punto fijo", podría dar el resultado correcto, pero no permitiría almacenar ciertos números; por ejemplo, le resultaría imposible almacenar el número 0'1. Un tercer método denominado "binario codificado en decimal" permite mucha más precisión (hasta llegar a la exactitud), pero para almacenar números grandes necesita mucha más memoria que los dos anteriores. Si esto es cierto, el problema no es del lenguaje ni del compilador sino del microprocesador. Última edición por Ñuño Martínez fecha: 21-08-2006 a las 11:54:27. |
|
#2
|
|||
|
|||
|
Problemas con el punto flotante
Gracias, por la respuesta tan rápida.
Olvidé mencionar un tema. Todos los valores que tienen las tablas y que se cargan previamente (no incluí el código para no poner un montón de líneas) son 0 o valores con dos decimales como máximo (positivos y negativos). Y las cantidades ninguna sobrepasa en la parte entera el valor 99999. Por cierto la tabla solo tiene 13 elementos, con lo cual con ¿ningun calculo ? me puede dar un valor tan alto. |
|
#3
|
||||
|
||||
|
Si estas trabajando con datos monetarios usa el tipo de dato Currency, tanto en la base de datos como en delphi, así solo cogerá los 2 primeros decimales.
Si usas Firebird como base de datos, debes crear el campo como NUMERIC(10,2) y dialecto 3. Como ya te han dicho, es un problema inherente al tipo de datos Float. Además tambien influye el Epsilon de la máquina, que es el número más pequeño que puede se puede definir con total precisión en ese ordenador. Por cierto: Diez Billonésimas parte de 1 euro/peso/peseta/dolar es ¿un valor tan alto? ![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 21-08-2006 a las 17:10:55. |
|
#4
|
|||
|
|||
|
Te estas confundiendo, no te esta dando ningun valor alto, simplemente un valor pequeñisimo muy proximo a cero.
Este numero esta en notacion cientifica: 9,09494701772928E-13 Que se correponde a (como ya han explicado en otro post) 0'000000000000909494791772928 Es decir un numero muy pequeño proximo a cero. Es posible incluso que alguno de los valores que tienes guardados en la base de datos no sean exactamente cero, pero la herramienta o el software con el que los ves lo redondeara a un numero determinado de cifras decimales de modo que te parecera que valen 0 aunque no sea asi. Esto te pasara en cualquier ordenador y cualquier compilador, al trabajar con numeros en punto flotante. Saludos |
|
#5
|
|||
|
|||
|
A lo que yo voy es a lo siguiente:
Si se fijan hay dos formulas de cálculo en el código. Ambas hacen exactamente lo mismo y los resultados son diferentes. Eso es lo que mas me preocupa. Entiendo y agradezco todos los comentarios anteriores pero no entiendo que ambas formulas den un resultado diferente (cuando hacen lo mismo). Si ambas formulas dieran igual, puedo entender casi todo, pero no puedo entender que segun haga el calculo (bien por supuesto) me de un resultado o otro, con el mismo set de datos. Por cierto, no utilizo Firebird utilizo Oracle 9i y la definición del campo, por casualidad es numeric (10,2). Gracias. |
|
#6
|
|||
|
|||
|
El tema como dicen atinadamente todos es por el valor de punto flotante, pero porque no haces esto:
Bueno, todo se vale con tal de salir de nuestras dudas. Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
|
#7
|
|||
|
|||
|
Ya lo hice y el resultado es identico. Falla. Gracias.
Yo he pensado que si intervendrá para algo el nuevo gestor de memoria y calculos que trae el delphi 2006, de Pierr la riche o algo asi creo que se llama. En alguna parte leí, que se debe a el la aceleración en la ejecución del ide de delphi 2006 y en los cálculos en los programas ejecutables resultantes. No se. Última edición por avmm2004 fecha: 21-08-2006 a las 19:19:07. |
|
#8
|
|||
|
|||
|
a) declara saldo como currency
b) al jalar los valores de la la base de datos utiliza el AsCurrency en lugar del Value Saludos |
|
#9
|
|||
|
|||
|
Cita:
En el segundo caso se sumas dos valores, y despues se hace una resta. De modo que en el segundo caso algun o algunos de los valores intermedios de la primera suma no son representables de forma exacta en binario de ahi la diferencia de redondeo. Tienes que entender que no todos los numeros decimales tienen representacion en binario de modo que en esos casos se guardar el valor binario mas aproximado. Por ejemplo el valor decimal 69,82 no tiene representacion exacta en formato binaro de modo que si despues de asignar ese valor a una variable de tipo float mandas imprimir esa misma variable, veras que el valor es ligeramente diferente !!! Aqui tienes un tutorial que explica con ejemplos los errores de redondeo en punto flotante, si te fijas es un tutorial de microsoft relativo a Visual Basic, no de delphi, los errores de redondeo son inherentes a la forma que tienen las computadoras de guardar los datos en punto flotante y no tienen que ver con ningun lenguaje en particular: http://support.microsoft.com/default...b%3Bes%3B42980 PD: Con el avance continuo de la tecnologia de programacion a lenguajes de mas y mas alto nivel, me parece que se esta olvidando enseñar a la gente las bases de funcionamiento de los ordenadores, cualquier aspirante a desarrollar software deberia aprender antes que nada estas bases, no puede ser que a un programador le coja por sorpresa temas tan basicos como este. Espero que esta reflexion no la tome nadie a mal ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Consulta Delphi 6, Delphi 2005 y Delphi 2006 | Leviatan | Varios | 6 | 18-08-2007 16:02:08 |
| Delphi 2006? | lookmydoom | Varios | 4 | 15-08-2006 13:54:45 |
| Que es .net y delphi 2006 | artemisa | Varios | 2 | 07-04-2006 00:59:51 |
| Pasar de delphi 7 a Delphi 2006 (problemas con VCL) | jmlifi | .NET | 8 | 24-01-2006 15:51:30 |
| Delphi 2006 | FGarcia | Noticias | 3 | 28-12-2005 18:07:44 |
|