浮点数运算的相关问题 ( 积分: 50 )

  • 主题发起人 主题发起人 EdwardZhou
  • 开始时间 开始时间
E

EdwardZhou

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
fLevel : double;
iLevelInt, iLevelFra : integer;
begin
{输入222.20,iLevelFra = 19}
fLevel := 222.20;
iLevelInt := Floor( fLevel );
iLevelFra := Floor(( fLevel - iLevelInt ) * 100);
ShowMessage( IntToStr( iLevelFra ) );
end;

怎么输出是19?调试发现iLevelFra = 20!
如果直接使用:
ShowMessage( IntToStr( Floor(20) ) );
输出就是20。
奇怪,请高手指教。
 
procedure TForm1.Button1Click(Sender: TObject);
var
fLevel : double;
iLevelInt, iLevelFra : integer;
begin
{输入222.20,iLevelFra = 19}
fLevel := 222.20;
iLevelInt := Floor( fLevel );
iLevelFra := Floor(( fLevel - iLevelInt ) * 100);
ShowMessage( IntToStr( iLevelFra ) );
end;

怎么输出是19?调试发现iLevelFra = 20!
如果直接使用:
ShowMessage( IntToStr( Floor(20) ) );
输出就是20。
奇怪,请高手指教。
 
var
fLevel : double;
iLevelInt, iLevelFra : integer;
begin
{输入222.20,iLevelFra = 19}
fLevel := 222.20;
iLevelInt := Trunc( fLevel );
iLevelFra := Trunc(( fLevel - iLevelInt ) * 100);
ShowMessage( IntToStr( iLevelFra ) );

end;
 
浮点数在计算机中是无法精确表示的,例如0.2在计算机中可能为0.19999999999。
所以结果是Int(0.199999 * 100) = 19了
 
你把 fLevel 定义成 Extended 就OK 了。
fLevel: Extended;
 
后退
顶部