繁体   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