我只是碰到一個奇怪的形勢下應運而生。爲什麼下面的代碼不返回0?相反,它會返回一個非常小的負數。
<cfset x = 5448.10-3311.23-2136.87>
<cfoutput>x=#x#</cfoutput>
上面的代碼將輸出:X = 4.54747350886E-013
我跑上述二者在CF9和CF10具有相同的結果的代碼。
任何幫助,非常感謝。
我只是碰到一個奇怪的形勢下應運而生。爲什麼下面的代碼不返回0?相反,它會返回一個非常小的負數。
<cfset x = 5448.10-3311.23-2136.87>
<cfoutput>x=#x#</cfoutput>
上面的代碼將輸出:X = 4.54747350886E-013
我跑上述二者在CF9和CF10具有相同的結果的代碼。
任何幫助,非常感謝。
<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
正如其他人所說,它是浮點精度相關。我只是想指出的分辨率,如果你想獲得一個合理的結果
<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的功能會給出面膜當數四捨五入到指定的小數位數。
是否使用雙精度? – 2012-05-03 18:23:12
http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems –
@RiverC - +1。如你所懷疑的,是的。如果你不熟悉CF,它大部分是無類型的,但是它是建立在Java之上的。當使用數學運算符時,數值會隱式轉換爲'java.lang.Double'。 – Leigh