Pregunta

Estoy trabajando en una aplicación ASP heredada. Estoy intentando insertar un valor (40.33) en un campo en SQL Server 2000 que resulta ser un tipo flotante. Cada lugar que puedo ver (a través de algunos registros) en la aplicación está enviando 40.33 al Procedimiento almacenado. Cuando ejecuto SQL Profiler en la base de datos mientras se realiza la llamada, el valor que veo en el seguimiento es 4.033000183105469e + 001

¿De dónde viene toda la basura extra (el 183105469)?

¿Por qué cuando paso 40 o 40.25 no hay nada extra?

¿Es este solo uno de los efectos secundarios extraños del uso de float? Cuando escribo algo, normalmente uso dinero o decimal u otra cosa, así que no estoy tan familiarizado con el tipo de datos flotante.

¿Fue útil?

Solución

Sí, esto es extraño, aunque bien conocido , el efecto secundario de usar FLOTACIÓN.

En Microsoft SQL Server, debe usar tipos de datos numéricos exactos como NUMERIC, DECIMAL , MONEY o SMALLMONEY si necesita valores numéricos exactos con escala.

No use FLOAT.

Otros consejos

Creo que esto es probablemente un problema de precisión: la parte 0.33 del número no se puede representar exactamente en binario. Probablemente sea lo más cerca que pueda estar.

El problema es que los flotadores no son 100% precisos. Si necesita que sus números sean exactos (especialmente cuando se trata de valores monetarios) ... debe usar un tipo Decimal.

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