gpt4 book ai didi

c++ - 帕斯卡到 C++ : trunc

转载 作者:行者123 更新时间:2023-11-28 00:03:09 28 4
gpt4 key购买 nike

我有旧的pascal代码

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

我必须将它转换为 C++ 代码。

这里很明显的事情是写

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

但这里的问题是 pascal 的 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

像这样的转换是由编译器隐式完成的。更多信息请read about implicit conversions (特别是 read about floating-integral conversions )。

但是,重要的是要注意(来自链接的引用):

If the value cannot fit into the destination type, the behavior is undefined

因此,截断后的浮点值必须适合赋值左侧的整数类型。

关于c++ - 帕斯卡到 C++ : trunc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37415723/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com