簡體   English   中英

減去數字時的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM