关于Math.Floor的问题

zhourongbiao 2006-02-25 08:47:25
下面的程序输出什么内容?

procedure TForm1.btn1Click(Sender: TObject);
var
WLLatitudeFZ : double;
WLLatitudeI, WLLatitudeF : Integer;
begin
WLLatitudeFZ := 10.111;
WLLatitudeFZ := StrToFloat(Format('%.2f', [WLLatitudeFZ]));
WLLatitudeI:= Floor(WLLatitudeFZ);
WLLatitudeF:= Floor(Frac(WLLatitudeFZ) * 100);
ShowMessage(IntToStr(WLLatitudeF) + ',' + IntToStr(Floor(Frac(10.11)*100)));
end;

我预期结果是:11,11,因为WLLatitudeFZ=10.11
但是在Delphi7中的结果是:10,11,为什么?
WLLatitudeFZ := StrToFloat(Format('%.2f', [WLLatitudeFZ]));的本意在于只保持小数后两位,可是如果去掉这句话,结果就是11,11了,这又是为什么?
...全文
264 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhourongbiao 2006-02-28
  • 打赏
  • 举报
回复
Frac(WLLatitudeFZ) = WLLatitudeFZ - Int(WLLatitudeFZ)

我查看当WLLatitudeFZ=10.11时,
WLLatitudeFZ - Int(WLLatitudeFZ) = 0.10999999
所以Floor(WLLatitudeFZ) = 10,晕~~~
cuteant 2006-02-25
  • 打赏
  • 举报
回复
按照你的程序,结果是:10,10

function Floor(const X: Extended): Integer;
X是Extended类型
老之 2006-02-25
  • 打赏
  • 举报
回复
Frac(WLLatitudeFZ) * 100 //这里产生了误差

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧