Trunc是取整函数,但不知为什么,本人在多台计算机上得出如下错误结果。大家不妨试试,知道答案的解析下
Trunc(2.1* 100) / 100 得出的结果不是2.1而是2.09
Trunc(4.7* 100) / 100 得出的结果不是4.7而是4.06
有知道问题的朋友解析下吗?

解决方案 »

  1.   

    补充,是赋值时候出错。比如
    i:=2.4   Trunc(i) / 100 得出的结果不是2.1而是2.09
    i:=4.7   Trunc(i) / 100 得出的结果不是4.7而是4.06
    其他数值不会有错
      

  2.   

    2.1* 100的浮点结果是2.099999...
    trunc就是把小数部分扔掉了
      

  3.   

    参考
    http://wenku.baidu.com/view/b3a4df1fa300a6c30c229fd5.html
      

  4.   

    困惑,以下运算会出错的
    i:='2.1'或i:='4.7'
    floattostr(Trunc(strtofloat(trim(i)) * 100) / 100);
    得出的结果分别是2.09和4.06
    现在不止Trunc会出错。连round也会出错。难道真是浮点运算的问题吗?那么截取小数点后两位数应该怎样?
      

  5.   

    并不是Trunc的问题,而是计算机表示浮点数的问题
    因为计算机用的是2进制,而在计算机上保存的每一个数都是有受位数限制的,不可能是无穷大(小)的数
    所以与10进制相互转换的时候是有误差的,这只是精度的问题,误差是允许的可以忽略所以编程的时候,浮点数计算一般要格式化結果,或4舍5入前加个很小很小误差即可
    如:Trunc(2.1*100+0.00000000005)/100
      

  6.   


    sz_haitao朋友,我想请教,为什么2.1的浮点数是2.09999999.而2.3的浮点数不是2.29999999呢?
      

  7.   


    原来是这样。感谢kaikai_kk朋友的解析!!!很清晰明白。谢谢!!!