[英]strange behavior when subtracting numbers
當我在Applescript(或其他語言)中使用此代碼時:
set var1 to "0.00"
set var2 to "50.86"
set var3 to "1335.56"
set var4 to "60.72"
set netto to "1447.14"
set sub_totaal to var1 + var2 + var3 + var4
set sub_dif to sub_totaal - netto
答案是: -2.27373675443232E-13
為什么?
並非所有的小數十進制值都具有精確的(以2為底)二進制表示形式。 大多數編程語言都必須遵守主機的浮點算術實現,這意味着交換和關聯算術的常規規則不成立。
注意到,即使最終的十進制值: 1447.14
不能精確表示為(IEEE-754)浮點值。
無論您使用哪種語言,了解這些限制都是至關重要的。 浮點精度/范圍誤差的分析本身幾乎是一個單獨的字段。
好吧,要進行精確數學運算,您可以使用Unix工具。 例如,一種這樣的工具是“ bc”。 因此,只需將您的計算結果發送到命令行工具即可。
set var1 to "0.00"
set var2 to "50.86"
set var3 to "1335.56"
set var4 to "60.72"
set netto to "1447.14"
set cmd to var1 & "+" & var2 & "+" & var3 & "+" & var4
set sub_total to do shell script "echo " & quoted form of cmd & " | bc"
set cmd to sub_total & "-" & netto
set sub_dif to do shell script "echo " & quoted form of cmd & " | bc"
return {sub_total, sub_dif} --{"1447.14", "0"}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.