首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

如何解决trunc的有关问题 trunc(2.01 * 1000) = 2009

2012-09-13 
怎么解决trunc的问题 trunc(2.01 * 1000) 2009procedure TForm1.Button12Click(Sender: TObject)var vf

怎么解决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这样子了

热点排行