簡體   English   中英

帕斯卡轉C ++:截斷

[英]pascal to c++: trunc

我有舊的帕斯卡代碼

var i : longint;
    m : double;
begin
  .....
  i := trunc(m);

我必須將其轉換為C ++代碼。

這里很明顯的事情是寫

double m;
int i;
.....
i = static_cast<int>(std::trunc(m));

但是這里的問題是帕斯卡的trunc返回整數

function trunc(
  d: ValReal
):Int64;

而c ++的trunc返回double。 例如trunc(2.3)是否可能返回1.999999999999而static_cast將其設置為1而不是2? 如果是,使用不帶有trunc的static_cast獲得相同的pascal行為是否正確?

i = static_cast<int>(m);

在C ++中將浮點值轉換為整數值時,浮點值會自動被截斷。

看下面的簡單示例:

#include <iostream>

int main()
{
    double d = 12.98;
    int i = d;

    std::cout << "i = " << i << '\n';
}

以上程序將打印

i = 12

此類轉換由編譯器隱式完成。 有關更多信息,請閱讀有關隱式轉換的信息 (特別是有關浮點積分轉換的信息 )。

但是,請務必注意(從鏈接的參考資料中):

如果該值不能適合目標類型,則行為未定義

因此,截斷后的浮點值必須適合於賦值左側的整數類型。

所有整數(和最長整數?)都可以用double精確表示。 如果trunc之類的函數定義為在數學意義上返回整數,則如果它的正確返回值可以用double表示,則永遠不會返回不是精確整數的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM