0

我正在使用 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 }

为什么以下不起作用?我真的无法理解这种行为。注意:当 $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
4

1 回答 1

0

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

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

% set s [ expr 50.01 + 0.01 ]
50.019999999999996

更多详情请访问wiki.tcl.tk:一个真正的问题

于 2015-12-12T17:21:50.847 回答