0

当我在 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

为什么?

4

2 回答 2

0

好吧,要进行精确数学运算,您可以使用 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"}
于 2013-07-05T14:02:00.007 回答
0

并非所有小数十进制值都具有精确的(以 2 为底的)二进制表示。大多数编程语言都必须遵守宿主的浮点算术实现,这意味着交换和关联算术的正常规则不成立。

请注意,即使是最终的十进制值:1447.14也不能完全表示(IEEE-754) 浮点值。

无论您使用哪种语言,了解这些限制都至关重要。浮点精度/范围误差的分析本身几乎是一个单独的领域。

于 2013-07-05T12:17:19.920 回答