Error aritmético [duplicado]

Posible duplicado:
¿Por qué esta resta no es igual a cero?

Acabo de encontrarme con una situación extraña. ¿Por qué el siguiente código no devuelve 0? En cambio, está devolviendo un número negativo muy pequeño.

<cfset x = 5448.10-3311.23-2136.87>
<cfoutput>x=#x#</cfoutput>

El código anterior generará: x = 4.54747350886E-013

Ejecuté el código anterior tanto en CF9 como en CF10 con los mismos resultados.

Cualquier ayuda es muy apreciada.

preguntado el 03 de mayo de 12 a las 19:05

¿Utiliza doble precisión? -

@RiverC - +1. Como sospechabas, sí. Si no está familiarizado con CF, en su mayoría no tiene tipo, pero está construido sobre Java. Cuando se utilizan operadores matemáticos, los valores numéricos se convierten implícitamente en java.lang.Double. -

2 Respuestas

<cfset x = PrecisionEvaluate(5448.10-3311.23-2136.87)>
<cfoutput>x=#x#</cfoutput>

Doc para PrecisionEvaluate(): http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fd9.html

contestado el 03 de mayo de 12 a las 22:05

Como otros han dicho, está relacionado con la precisión del punto flotante. Solo quería señalar una resolución si está tratando de obtener un resultado razonable

<cfset x1 = 5448.19-3311.23-2136.87 />
<cfset x2 = numberformat(x1, "9.99") />
<cfoutput>x1=#x1#<br />x2=#x2#</cfoutput>

Resultado

x1=0.0899999999997
x2=0.09

La función de formato numérico redondeará el número al lugar decimal especificado cuando se le proporcione una máscara.

contestado el 03 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.