我的代码有很多从double到int的转换。该代码可以看作是
double n = 5.78;
int d = n; // double implicitly converted to a int
从double到int的隐式转换是截断的转换,这意味着5.78将保存为5。但是,已决定通过自定义四舍五入来更改此行为。
解决此类问题的一种方法是拥有自己的DOUBLE和INT数据类型并使用转换运算符,但是可惜我的代码很大,而且我不允许做太多更改。我想到的另一种方法是在每个数字中加上0.5,但是可惜代码很大,而且我改变得太多了。
可以简单地将double转换为int转换行为,从而影响整个代码。
最佳答案
您可以使用统一的初始化语法来禁止缩小转换范围:
double a;
int b{a}; // error
如果您不希望这样做,可以使用
std::round
函数(或其姐妹std::ceil
/ std::floor
/ std::trunc
):int b = std::round(a);
如果您希望最小的差异变化,这是您可以做的。但是请注意,这是(如果可以将其命名)是一个不好的解决方案,与未解决实际问题相比,由于未定义的行为,很可能使您崩溃和着火。
定义您的自定义
Int
类型,以所需的方式处理转换:class MyInt
{
//...
};
然后在预处理器黑魔法的帮助下用
int
替换每次出现的MyInt
:#define int MyInt
问题:
main
的返回类型-您位于UB-land 关于c++ - C++将隐式转换从double更改为int,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40161094/