2012-05-03 69 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的功能會給出面膜當數四捨五入到指定的小數位數。