Pregunta

El problema es este: cuando agrego dos o más dobles de una tabla a una vista, en lugar de darme los resultados correctos, agrega unos diez dígitos más o menos. Por ejemplo, 0.5 + 1.5 = 1.99999999998 o 5.5 + 8.5 = 14.0000000001. ¿Algunas ideas? (Sé que esto es una especie de pregunta n00b y recuerdo haber tenido que lidiar con cosas así en los exámenes del 9º grado, pero no puedo recordar cómo lo hice en ese entonces: P)

¿Fue útil?

Solución

http://dev.mysql.com/ doc / refman / 5.0 / es / string-functions.html # function_format

¿Puede dar formato a los números de esta manera si eso es lo que busca?

Otros consejos

Agregar 1 y 1 como flotantes o dobles no debe resultar en nada más que 2.

Me cuesta creer que 0.5 + 1.5 salga de cualquier cosa menos 2.

Todos estos números se pueden representar correctamente en un punto flotante binario.

Odio decir que no creo en tus ejemplos, pero no lo creo. :-)

Sin embargo, creo que es posible que tenga problemas con un número como el 1.1.

¿Por qué? Porque 1/10 resulta ser un decimal repetitivo en binario.

El problema surge cuando se intenta convertir números de punto flotante entre representaciones decimales y binarias. Algunos números hacen que el viaje sea bueno, pero otros solo son aproximados.


Sin embargo, si tus ejemplos realmente funcionan así, no tengo idea de lo que está sucediendo y me encantaría saberlo.

  
    

los números de punto flotante son SIEMPRE simples aproximaciones. :-) Si la precisión importa, encuentre una manera de usar números enteros.

  

En mi experiencia, cuando usé el tipo de datos decimal en lugar de float / double, siempre obtuve los resultados precisos.

Este artículo explica el problema bastante bien.

En pocas palabras, los números de punto flotante muy grandes o muy pequeños pueden resultar en una pérdida de precisión durante los cálculos.

No esperes enteros cuando trabajas con tipos de punto flotante.

No estoy seguro de si está buscando una explicación o una solución, pero como ya ha recibido indicaciones para buenas explicaciones ...

Si necesita que sus números se comporten como enteros, use números enteros. Si necesita un grado de precisión finito (es decir, dos decimales, para los campos que representan dinero), almacénelo como un entero de todos modos, pero multiplíquelo por cualquier factor de 10 que necesite para deshacerse del decimal cuando lo coloque en La base de datos y la división por la misma cuando lo saque de nuevo.

Entonces, si estás representando un widget que cuesta $ 3.99, pones 399 en el campo WIDGET.cost.

No sé si eso se aplica a tu situación o no. Pero la regla general es que los números de punto flotante SIEMPRE son simples aproximaciones. :-) Si la precisión importa, encuentre una manera de usar números enteros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top