Javascript 减法数字时的奇怪行为

Javascript 减法数字时的奇怪行为,javascript,floating-point,applescript,Javascript,Floating Point,Applescript,当我在Applescript(或其他语言)中使用此代码时: 答案是:-2.27373675443232E-13 为什么?并非所有小数点十进制值都有精确的(以2为基数)二进制表示。大多数编程语言都必须遵守主机的浮点算术实现,这意味着交换和关联算术的常规规则不适用 请注意,即使是最后的十进制值:也不能精确表示为(IEEE-754)浮点值 无论你使用哪种语言,都必须意识到这些限制。浮点精度/范围错误的分析本身几乎是一个单独的字段。好吧,要进行精度计算,可以使用unix工具。例如,“bc”就是这样一种工

当我在Applescript(或其他语言)中使用此代码时:

答案是:
-2.27373675443232E-13


为什么?

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

请注意,即使是最后的十进制值:也不能精确表示为(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"}

浮点运算又开始了!再见,你好,布雷特,谢谢。我是这样解决的:将sub_dif设置为((sub_totaal*100)-(netto*100))/100@user2553579-我怀疑你只是“走运”,因为缩放导致了。在这种情况下,它可能有效,但值得保持对这些问题的意识。谢谢!另一种解决方案是生成一个cmd字符串。
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"}