解决方案 »

  1.   

    1、single是单精度浮点数类型,浮点数取值范围:
    负数取值范围为 -3.4028235E+38 到 -1.401298E-45,正数取值范围为 1.401298E-45 到 3.4028235E+38。
    它的有效位是7位。
    2、sumje定义的是单精度浮点数,它保存的数据有效位是7位,
    strtofloat(formatfloat('0.00',9.55))的值是:9.55,
    但是,代码sumje:= strtofloat(formatfloat('0.00',9.55));
    执行的结果是:sumje:=9.550000;
    3、sumje的有效位7位的数是:9.550000;
    4、实际是sumje保存的值是9.55000019073486,这与strtofloat(formatfloat('0.00',9.55))不是矛盾的,因为它的有效值是:9.550000。通过,上述表述,可以理解浮点数表示数据的真实情况,你的问题解决了吗? 
      

  2.   

    谢谢2楼的回答,是这样的,最近我们在做一个接口项目,在我们这边填入的值是string类型的,然后要转成single类型的传给别人,其实就是一个扣费的功能,在我们这边填入多少,就传多少过去,上述例子里:卡上的余额还剩9.55元,我们系统填入的实际也是9.55元,转成single类型后,值就变成9.55000019073486,9.55000019073486>9.55了,于是填报就不成功,所以有什么方法可以解决一下吗
      

  3.   

    浮点数的取值,就是这样,要取精度的值。
    建议不要使用single类型,采用Currency类型,问题就解决了。 
      

  4.   

    可以在转化后再round一下:
    sumje:=round(sumje*100)/100;当然以后像金额类的数据需要精确值的话用currency类型最好。