Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Alex_bro en 29 Marzo 2009, 19:13 pm



Título: [MYSQL] Problema con float
Publicado por: Alex_bro en 29 Marzo 2009, 19:13 pm
Buenas, tengo un pequeño problema que me esta volviendo loco.
En un campo float(20,2) intento insertar el numero 891985.80, pero siempre lo guarda como 891985.81
Sin embargo en otro campo igual, si es capaz de guardar cosas como 0.45 etc y no cambia el decimal.
No solo pasa con ese numero, sino que siempre hace cosas raras con decimales, como considerar que 1.42 es 2

¿Que puede ser?

Gracias :D


Título: Re: [MYSQL] Problema con float
Publicado por: ^Tifa^ en 29 Marzo 2009, 19:33 pm
El problema es que FLOAT no guarda precisamente cifras numericas altas sin alterarlas o redondearlas al valor mas cercano de la misma... es una deduccion de base fracionaria 10. No soy buena en matematicas lol para explicarte....

Pero aun alteraras la tabla y pongas el tipo como Double estaras supuesto a seguir sufriendo de redondear valores a sus niveles mas cercanos, aunque float solo soporte 4 bytes y double 8 me parece.

Si quieres tener cifras altas exactas sin redondeos incluidos, querras alterar ese campo al tipo Decimal o Numeric. Tendras una ligera baja en el desenvolvimiento ante las consultas SQL pero estara garantizado que tus cifras insertadas no seran redondeadas.


Título: Re: [MYSQL] Problema con float
Publicado por: Alex_bro en 29 Marzo 2009, 19:37 pm
Lo que no entiendo es si le he puesto un float 20,2 que soporta 2 decimales, y le intento meter un numero de 2 decimales que me lo intente redondear... si le intentara meter uno de 3 lo entiendo, pero no veo necesidad de redondear asi, y menos cuando hace cosas como pasar el ,80 a ,81 Pfff...

Gracias por tu respuesta.


Título: Re: [MYSQL] Problema con float
Publicado por: ^Tifa^ en 29 Marzo 2009, 19:54 pm
Encanto escucha.

Citar
El tipo FLOAT se usa para representar tipos numéricos aproximados

Lo que Mysql te esta haciendo no esta mal, de hecho esta explicitamente explicado aqui :

http://dev.mysql.com/doc/refman/5.0/es/numeric-types.html

Porfavor, lee el link anterior y comprenderas mas detalladamente porque el tipo FLOAT redondea y DECIMAL no. Esta gente te lo explica claro y esta en espanol :)

Sobre los puntitos flotantes no confundir el tipo de dato con la cantidad de puntos flotantes y que esto sea causa de reondeo. Si yo tengo ejemplo decimal(7,2)  Y inserto un dato 450.300 el va a guardarme  450.30 Porque le estoy diciendo tengo una capacidad de guardar 7 numeros ENTEROS y 2 decimales o sea el cuenta que despues de yo colocar el puntito a mi cifra solo accepta 2 numeros mas porque así yo se lo especifique. Pero el no me esta redondeando nada, porque yo le dije solo acceptame 2 decimales despues del puntito. Pero perfectamente mi campo anterior acceptaria sin problemas 45000.20  y no lo redondearia como dices tu, que eso no se llama redondear en este caso, se llama lo que yo te peticiono que guardes.