expr的TCL浮点输出与条件运算符'<';不起作用

expr的TCL浮点输出与条件运算符'<';不起作用,tcl,expr,Tcl,Expr,我使用的是TCL 8.4,而下面的工作原理与预期一样 % if { 50.02 < 50.02 } { puts HI } % set s 50.02 50.02 % if { $s < 50.02 } { puts HI } % set high 50.02 50.02 % if { $s < $high } { puts HI } % % % if { 50.02 < $high } { puts HI } %if{50.02

我使用的是TCL 8.4,而下面的工作原理与预期一样

% if { 50.02 < 50.02 } { puts HI }
% set s 50.02
50.02
% if { $s <  50.02 } { puts HI }
% set high 50.02
50.02
% if { $s <  $high } { puts HI }
%
%
% if { 50.02 < $high } { puts HI }
%if{50.02<50.02}{puts HI}
%设定50.02
50.02
%如果{$s<50.02}{puts HI}
%设定高50.02
50.02
%如果{$s<$high}{put HI}
%
%
%如果{50.02<$high}{puts HI}
为什么下面的方法不起作用?我真的无法理解这种行为。注意:当$s为50.03时,它将按预期工作

% set s [ expr 50.01 + 0.01 ]
50.02
% if { $s <  $high } { puts HI }
HI
% set s [ expr double(50.01 + 0.01) ]
50.02
% if { $s <  $high } { puts HI }
HI
%s集[expr 50.01+0.01]
50.02
%如果{$s<$high}{put HI}
你好
%设置s[expr double(50.01+0.01)]
50.02
%如果{$s<$high}{put HI}
你好

浮点数无法精确存储。对于数学上假定相等的两个数字,比较结果可能不正确

我的Tcl 8.6打印(这可以解释您得到的结果):


有关这方面的更多详细信息,请访问

完成此解决方法后:
设置s[expr double(round($s+0.01)*100)/100.0)]
,它可以工作哦,又是这个问题!不同的伪装,相同的老问题。
% set s [ expr 50.01 + 0.01 ]
50.019999999999996