繁体   English   中英

DWORD部门Delphi / C ++

[英]DWORD division Delphi / C++

因此,在C ++中,我可以执行以下操作:

DWORD count;

count = 3 / 1.699999;

cout << count;

这将导致:

1个

但是,Delphi抱怨Cardinal和Extended不匹配。

var
  count: DWORD;
begin
  count := 3 / 1.6;
  Writeln(inttostr(count));

所以我要么必须四舍五入count := round(3 / 1.6)这导致:

2

或trunc count := trunc(3 / 1.6)导致

1个

截断真的是要走的路吗? 是否可能需要切换编译器开关?

您可能会认为,使用Google之类的工具很容易,但是请相信我并非如此。

谢谢你的时间!

C / C ++仅具有一个算术除法运算符- / -,但其行为取决于传递给它的操作数的类型。 它可以执行整数除法浮点除法

Delphi有两个算术除法运算div用于整数除法 ,和/用于浮点除法

您的C ++代码正在执行浮点除法 ,然后将结果分配给DWORD ,这不是浮点类型,因此赋值会从小数点后截断:

1 / 1.6999991.764706920415836 ,将截断为1

在Delphi中, /运算符返回Extended ,这是浮点类型。 与C / C ++不同,Delphi不允许将浮点类型直接分配给整数类型。 您必须使用Round()Trunc()

在这种情况下,您的C ++代码的Delphi等效项是使用Trunc()

var
  count: DWORD;
begin
  count := Trunc(3 / 1.699999);
  Write(IntToStr(count));

最简单的方法是使用trunc(3 /1.699999).

另一种方法是在除法之前使用先前的乘法。

var
  count: DWORD;
begin
  count := 3;
  count := (count*1000000) div 1699999;
  Writeln(inttostr(count));

当然,为避免溢出, count应小于< maxInt div 1000000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM