求助 Math.floor取整值即小了1

若浮生 2019-07-17 11:06:43
var
a,b:double;
s:string;
begin
a := 4810;
b := 140/100;

s := inttostr(Math.floor(a* b));

end;
结果s=6733

求教下这种要怎么处理??
...全文
498 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
输出6733应该是用的32位编译器

秋天之落叶 2019-07-30
  • 打赏
  • 举报
回复
XE10.3 S:=6733
改成:
procedure Button8Click(Sender: TObject);
var
a, b: double;
s: string;
begin
a := 4810 * 10;
b := 140 / 100 * 10;

s := inttostr(System.Math.floor(a * b / 100));
end;
结果等于6734。
BlueStorm 2019-07-30
  • 打赏
  • 举报
回复
a, b: double 改为 a, b: Extended 就可以了 但无论如果,Delphi出现这种问题是不合理的。
  • 打赏
  • 举报
回复
那可以直接用currency类型,编译器自动缩放10000倍
woniugongzuoshi 2019-07-30
  • 打赏
  • 举报
回复
用floor有时候确实不免尴尬,我一般都放大一百倍算完了再缩小。
若浮生 2019-07-17
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
10.2.1实测输出6734
delphi7呢,这种有办法处理吗
  • 打赏
  • 举报
回复
10.2.1实测输出6734
  • 打赏
  • 举报
回复
floor 地板,向负无穷舍入
ceil 天花板,向正无穷舍入
LinY_X 2019-07-17
  • 打赏
  • 举报
回复
可能不是floor的问题 会不会是double的精度的问题 b可能是1.399999999999999999999

16,749

社区成员

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

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