算术错误

时间:2012-05-03 18:21:12

标签: coldfusion

  

可能重复:
  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上运行了上面的代码并得到了相同的结果。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

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

PrecisionEvaluate()的文档: http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7fd9.html

答案 1 :(得分: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函数会将数字四舍五入到指定的小数位。