其实这不是浮点出错,而是浮点总是近似值,方法有1。用ROUND函数,2.用CURRENCY类型。3. 整数部分和小数部分用两个整数分别存储。

解决方案 »

  1.   

    不好意思,我是浮点运算大师!
    Delphi中的帮助写的再明了不过了!
    主要是FloatToStr的问题,它是将浮点数以 general方式共15位数字表示出来的。要想正确的表示,用function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string
    将程序段改为:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s1,s2:Extended;
    begin
      s1:=999999.99;
      s2:=999998.88;
      showmessage(FloatToStr(s1-s2));
      showmessage(FloatToStrF(s1-s2,ffFixed,18,10));
    end;
    看看结果是否正确!能得到50分吧!
      

  2.   

    to johnpei:
    你的方法的确可以解决,但还是有问题。我不能定死小数位的长度。那样很不好,如设的太长,会有很多0。如太短,则自动四舍五入。也不好。
      不过还是要加分的!
      

  3.   

        其实你所发现的现象,我早就发现了,这当中还包括浮点运算的不确定性,我第一次把你的程序代码编译运行的结果是‘1 。11’,但第二次编译就不是了,这本身还和DELPHI编译器本身有关,对于你的计算,其实大多数情况,数据的范围都是可以估计的,因此,小数位数可以估计出来,是不是?
        很高兴和你讨论这个问题!