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