strtofloat的反回值Extended类型,
sum := strtofloat(s);的时候转换了一下,造成了这两个数有很小的区别,
而19.5可能是一个比较特殊的数,没有造成这个误差,所以没有显示,你把sum: double;改成sum:Extended,在测试,就不会有不同了。

解决方案 »

  1.   

    strtofloat返回的是Extended类型,你可以这样定义,就没问题
    var
       sum: Extended;
       s: string;
    begin
       s := '19.4'; //'19.7','19.8','19.3','19.5'
       sum := strtofloat(s);
       if sum<> strtofloat(s) then
          showmessage('error');//假如s='19.5'则不执行
    end;
      

  2.   

    因为浮点数不是精确的数字,所以不能用于精确比较,也就是说,对于浮点数,
    不要用<> 或 = 进行比较。这是写程序的规则之一。
      

  3.   

    你在程序中定义一个很小的浮点数,可以解决这个问题。
    var
    sum,esp:extended
    s:string;
    begin
     esp:=1.0e-20; s := '19.4'; //'19.7','19.8','19.3','19.5'
     sum := strtofloat(s);
     if abs(sum-strtofloat(s))>esp then
     showmessage('error');
    end;