我观察到 tcl8.6.6 的精度值不正确。此行为更改是从 tcl 8.5 开始的。我没有修改过tcl_ precision。在 tcl8.5 和 tcl8.6 中默认为 0
这里是tcl_ precision的参考https://wiki.tcl-lang.org/page/tcl_ precision
根据上面的参考,我期望值是-310.032,而不修改默认的tcl_ precision。
请检查以下表达式。
tclsh8.5
% puts [expr -344.48*0.9]
-310.03200000000004 // Incorrect
% puts [expr -466.9*0.9]
-420.21 //correct
这是 tcl8.4 的结果
tclsh8.4
% puts [expr -344.48*0.9]
-310.032
我尝试过多个 tcl 版本。 tcl8.4 版本似乎给出了正确的结果。
tclsh8.5
% puts [expr -344.48*0.9]
-310.03200000000004
期望结果与tcl8.4相同
tclsh8.4
% puts [expr -344.48*0.9]
-310.032
虽然我投票决定将其作为重复项关闭,但 8.5 中已经发生了变化。 检查https://wiki.tcl-lang.org/page/tcl_ precision
从 Tcl 8.5 开始,不推荐将 $tcl_ precision 更改为默认值 0 以外的值。如果需要控制浮点值的显示精度,请使用格式(例如format %.12g $x)。
$tcl_ precision 的默认值为 0,这意味着当 Tcl 将数字转换为字符串时,区分浮点数与其最近邻居所需的最少数字。这种行为的优点是像 1.4 这样的不精确数字的字符串表示是 1.4 而不是 1.39999999999999999,允许 Tcl 保持其 EIAS 语义,并为脚本作者提供更直观的表示。
和官方文档