![]() |
float a decimal: overflow error
Buen dia
estoy aqui molestandolos de nueva cuanta con un problema que me trae de cabeza resulta que tengo alrededor de 400 campos FLOAT en mi BD necesito cambiarlos a DECIMAL(18,8) pero el sql se niega a hacerlo argumentando: Código SQL [-]Arithmetic overflow error converting float to data type numericCabe decir que ya lo he intentado por todas las maneras que mi pobre intelecto lo a permitido: 1.- conversion directa: set CAMPODECIMAL = CAMPOFLOAT 2.- Con cast y/o convert 3.- creando otra columna DECIMAL despues pasarle los datos 4.- redondeando la columda FLOAT 5.- multiplicando la columna FLOAT por 10000000 redondeandola a 0 digitos y despues pasarla al campo DECIMAL dividiendola entre 10000000 6.- usando un DTS y otros artilugios apelo a ustedes a ver si tienen algun truco debajo de la manga para este caso Carlos por cierto disculpa por mi Horrortografia |
Hola
Probe con algunos valores y solo da problemas si el float tiene mas d diez digitos. Ese es el caso? tenes algunos valores que superen los 10 digitos? Si es asi, solo se me ocurre pasarlos perdiendo digitos, cosa q no creo q sea aceptable Saludos |
Buen dia Ricardosml
En efecto, el error ocurre al intentar pasar datos con mas digitos que los declarados para el nuevo campo, en mi caso (18,8), y sobre la perdida de precicion que mencionas, la causa de el cambio es la poca exactitud que brindan los campos FLOAT, por lo tanto es preferible, en mi caso, sacrificar digitos en esta actualizacion a fin de ganar presicion en los calculos de ahora en adelante. sobre la sugerencia, lo intente dando un ROUND(campo,8) pero sigue dandome el mismo error, mirando los Books Online encontre que ROUND regresa el mismo tipo de dato que el valor que le mandas, asumo pues que me esta regresando un float con la misma precision que el que le estoy mandando y por lo tanto provoca el overflow (es solo una supocicion), entonces la pregunta seria como truncar a 8 decimales (sin importar la perdida de exactitud) sin utulizar el ROUND, o utilizandolo de forma correcta si el caso es que me estoy equivocando en mi supocicion Agradecere cualquier comentario Carlos |
creo q no m explique bien, cuando m referia a la cantidad d digitos no me referia a los decimales, sino a la parte entera, creo q el problema se presenta si tenes un numero que tenga mas d 10 digitos.
Saludos |
En efecto Master el problema eran los digitos a la derecha estaba estableciendo un limite de 18 y nunca se me ocurrio revisar que no tuviera cantidades mas grandes que esas, el problema ya quedo les paso el script por si alguien tiene el problema lo pueda solucionar, es recomendable mejorarle pero por cuestiones de tiempo lo deje asi:
muchas gracias de nuevo y espero darme vueltas por aqui mas seguido para contribuir con algo GRACIAS |
La franja horaria es GMT +2. Ahora son las 03:09:23. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi