single类型的四字节浮点数,用roundto(asingle,-2)保留两位小数,这时出现个一个问题,是如果asingle小于或大于一个值的时候,asingle就用科学计数法表示,在用roundto就会有错误,现在想知道这个界限值,怎么判断这个值避免这个问题

解决方案 »

  1.   

    最好的办法是用FloatToStr,然后再对字符串操作,精度上不会出现xx.xx9999999999这样的情况。
      

  2.   

    对付这类问题,比较灵活的办法是自己编程处理。你可以看看roundto的源码function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
    var
      LFactor: Double;
    begin
      LFactor := IntPower(10, ADigit);
      Result := Round(AValue / LFactor) * LFactor;
    end;其中intpower 原型:
    function intpower(base:float;const exponent:Integer):float 
    功能:返回base的exponent次方
      

  3.   

    今天起得早,运动完后做下数学题,由于没有相关准确资料, 我用硬代码测试了一下,这个临界值=92233722601930753。(aSingle >= 临界值则roundto(asingle,-2)出现异常). 希望是正确的。
      

  4.   

    roundto 建议少用还是用FloatToStr 好用点