float的问题(50分)

  • 主题发起人 主题发起人 andrew4031
  • 开始时间 开始时间
A

andrew4031

Unregistered / Unconfirmed
GUEST, unregistred user!
if sl.value>strtofloat(rk)-strtofloat(ck) then
begin
......
end;
其中
sl.value=0.01
rk=2.65
ck=2.64
为什么sl.value就大于strtofloat(rk)-strtofloat(ck)???应该是等于啊,不解
 
小数位引起的,这类问题你要用四舍五入处理一下。
 
不可能吧!
procedure TForm1.FormCreate(Sender: TObject);
var
a,b,c:real;
begin
a:=0.01;
b:=2.33;
c:=2.32;
if a>(b-c) then
showmessage('a')
end;

这样没问题呀
 
建议设个断点看下b-c的结果
 
用 ( sl.value-( strtofloat(rk)-strtofloat(ck) ) ) > 0.000001 来判断两个浮点数是否相等,...在不相等的情况下再判断大小
 
double/real类型是不能用=比较的,有小数的问题
也就是说你看到可以输出的0.01 计算机表示的时候可能是0.01000001 这样的大小,除非用定点小数 (数据库支持,比如money,numeric(10,2)这些类型,delphi不支持)
 
这里有隐式转换关系的,大小由小数位数决定,你和0.000000000000000000000000000000001比较一下,就知道了
 

Similar threads

S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
S
回复
0
查看
749
SUNSTONE的Delphi笔记
S
S
回复
0
查看
895
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
后退
顶部