Pasar float a decimal en SQL Server 2005

El error más común cuando queremos cambiar el tipo de datos de un campo de una tabla del tipo float a decimal es Arithmetic overflow error converting numeric to data type numeric. Este error se produce por una simple razón los datos float almacenan una mayor cantidad de información que los datos del tipo decimal por tanto debemos de modificar estos datos float (tamaño) para que se puedan meter dentro de campo decimal.

Los campos float por defecto en sql server 2005 tienen tamaño 53 pero se pueden definir tamaño 23 que si permite un decimal normal, los valores decimales tienen un máximo de 38. Entiéndase estos números en float[(n)] y en decimal(p,[s]), dónde n por cualquier número que pongamos estará entre 2 valores 23 ó 53 (entre 1 y 23 siempre n=23, entre 24 y 53 n=53), p son la cantidad de dígitos que tendrá el decimal tanto a la izquierda como a la derecha de coma y s es el máximo número de caracteres decimales tal que s se mantiene entre el rango 0 a p.

También suele ocurrir que aunque tengamos un float(10) nos siga dando el error Arithmetic overflow error converting numeric to data type numeric. Y es que si no podremos guardar decimales cuyo valor de s sea mayor que el número mínimo de decimales que tenga cualquiera de los float, entiéndase en el ejemplo siguiente:

Los valores float son los siguientes:

1,43 – 1,4354 – 1,5 – 1,5463 : el menor número de decimales que hay es 1 en la cifra 1,5.

Por tanto todas las conversiones fallarán salvo a decimal (x,1) ó decimal (x,0), siendo x un valor entre 0 y 38.

El problema es que aunque actualices la base de datos siempre que pongas 1,50000 esto se guarda en un campo float como 1,5, habría que guardarlo como 1,49999 o 1,50001 dependiendo de la cantidad de caracteres a la izquierda que queramos conservar.

Aquí tenéis una referencia a los tipos de datos de SQL Server.

Comentarios