浮点型数据间的运算结果出乎预料?
代码情形如下:
var
f1,f2:double; //类型为double时导致错误,类型为currency时就正确了。
begin
...;//代码略,f1,f2会从数据库中取值。
f1:=f1-f2; //?在未执行此语句时,从delphi调试环境下显示f1的值为6.3,f2的值为6。
//执行完此语句后,从delphi调试环境下显示f1的值为0.3,但是当将f1
//转换成字符串后(用floattostr),字符串的内容竟然是0.2999999999999997,
//这使得我生成的Sql语句内容不正确。
end;
为什么使用Currency而不使用Double,single程序就会正确运行呢?
于是我写了一些测试代码:
var
v1,v2:double;
begin
v1:=6.3;
assert(v1=6.3); //failed.
v1:=6;
assert(v1=6); //failed.
assert(v1-v2=0.3); //failed.
end;
数据类型改为Currency后:
var
v1,v2:Currency;
begin
v1:=6.3;
assert(v1=6.3); //ok.
v1:=6;
assert(v1=6); //ok.
assert(v1-v2=0.3); //ok.
end;
请帮我解释一下!