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