我在编辑框文本改变消息处理函数中这样写:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  try
    if Edit1.Text <>'' then
      if (strtofloat(Edit1.Text)*100-trunc(strtofloat(Edit1.Text)*100)) >0 then
        showmessage('小数点后不能超过2位数!');
  except
    on E:EConvertError do
      showmessage('请输入正确的浮点数!');
  end;
end;
我的目的是控制文本框中只能输入浮点数,并且小数点后不能超过2位,运行结果出现奇怪的问题,输入1.2以外的数字都照我的意图运行
不过输入1.2就提示'小数点后不能超过2位数!'了,可是只有1位小数啊(不是我眼花吧- -),我不明白了,希望大虾门给个合理的解答!!!!

解决方案 »

  1.   

    按照你的思路, 应该这样写:
    if comparevalue((strtofloat(Edit1.Text)*100-trunc(strtofloat(Edit1.Text)*100)),0, 0.0000001) <> 0 then
      

  2.   

    编译器处理float型的数值时,会有误差,你可以在程序运行时放几个参数进去,
    分别等于strtofloat(Edit1.Text)*100,trunc(strtofloat(Edit1.Text)*100)以及strtofloat(Edit1.Text)*100-trunc(strtofloat(Edit1.Text)*100)看看他们是不是和你预期的相等,一般在程序中浮点数都是以e来表示的
      

  3.   

    换个控件,用maskedit试试,直接设置属性就可以实现你要的功能。
      

  4.   

    照2楼的写法就没问题了,可是我还是不明白为什么我的写法1.2会产生那样的误差呢,而其他数又不会,delphi编译器处理浮点数误差这么大吗
      

  5.   

    浮点数不能和0直接比较,一般都是abs(value) > 0.00000000001后面这个是精度,自己设置,不用太多貌似我的想法和2楼的差不多
      

  6.   

    abs(value)< 0.00000000001 符号写错了,汗这样写就相当于int类型时候的value = 0