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