[英]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.699999
是1.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.