读书人

如何解决trunc的有关问题 trunc(2.01

发布时间: 2012-09-13 09:51:52 作者: rapoo

怎么解决trunc的问题 trunc(2.01 * 1000) = 2009
procedure TForm1.Button12Click(Sender: TObject);
var vf:Double;
vi64:Integer;
begin
// vf := strtofloatdef(edit1.Text,0);
vf := 2.01;
vf := vf * 1000;
vi64 := Trunc(vf);
showmessagefmt('%D',[vi64]);
end;

大家帮忙运行上面的代码,给个方法解决这个问题?
我本意是想取一个有3位小数的浮点数,结果不正确,如何解?

[解决办法]
var
vf:single;
//vi64:Integer;
begin
// vf := strtofloatdef(edit1.Text,0);
// vf := 2.01;
vf := 2.01 * 1000;
//vi64 := Trunc(vf);
showmessagefmt('%.3f',[vf]);
[解决办法]

Delphi(Pascal) code
var vf:Double;    s:string;begin  vf := 2.01;  s:=format('%6.3f ',[vf]);  showmessage(s);end;
[解决办法]
var
f: integer;
begin
f:=trunc(2.01 * 1000);
showmessagefmt('%d',[f]);
end;
[解决办法]
不要拆开,应该放一起,即:trunc(2.01*1000)

因为计算机只有0,1;在存储vf := 2.01;时,不是刚好在Double精度内就保存的下,后面有被舍去的数
而再转换成10进制去计算时,就会变成2.009999999999这样子了

读书人网 >.NET

热点推荐