2012-05-03 68 views
0

可能重复:
Why does this subtraction not equal zero?算术错误

我只是碰到一个奇怪的形势下应运而生。为什么下面的代码不返回0?相反,它会返回一个非常小的负数。

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

上面的代码将输出:X = 4.54747350886E-013

我跑上述二者在CF9和CF10具有相同的结果的代码。

任何帮助,非常感谢。

+1

是否使用双精度? – 2012-05-03 18:23:12

+2

http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems –

+0

@RiverC - +1。如你所怀疑的,是的。如果你不熟悉CF,它大部分是无类型的,但是它是建立在Java之上的。当使用数学运算符时,数值会隐式转换为'java.lang.Double'。 – Leigh

回答

0

正如其他人所说,它是浮点精度相关。我只是想指出的分辨率,如果你想获得一个合理的结果

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

结果

x1=0.0899999999997 
x2=0.09 

NumberFormat的功能会给出面膜当数四舍五入到指定的小数位数。