将代码从Visual Basic转移到C++问题
Moving code from Visual Basic to C++ issue
我面临着一个关于用C++翻译一堆用Visual Basic编写的源代码的问题。在代码中,有一个对方法Sign(VB)的调用,以及从float到integer的各种转换。。。你能确认1、2、3的c++代码与VB的代码相同吗?除了隐式转换之外,我不知道转换是如何执行的(请参见4)。知道吗?
1) 方法符号(Visual Basic)
//C++
int sign(float value)
{
if (value < 0) return -1;
else if (value == 0) return 0;
else return 1;
}
2) 方法Int(Visual Basic)
//C++
int Int(float value)
{
return ((value >= 0) ? value : floor(value));
}
3) 方法CInt(Visual Basic)
//C++
int CInt(const float val)
{
float x = fabs(val - (int)val);
if (fabs(x - 0.5) < 0.0001)
return (int)val;
else
return (int)(val+(val>=0.0?0.5:-0.5));
}
4) 还有一个从double到int的隐式转换。如何在c++中进行这种转换?
//Visual basic
Dim dt As Integer = -99.2
提前感谢您,
1-不同的是,浮点值不应与常量变量(本例中为0)进行比较。因此,这是一个更好的代码:
const float epsilon = 0.00001f;
if(value < -epsilon) return -1;
if(value > epsilon) return 1;
return 0;
2-这取决于你想要什么,例如-5.7。如果您想要-5,只需使用(int)进行强制转换即可。例如,如果您有一个名为f的浮点变量,请使用(int)f。如果你想要-6,使用这个功能:
int Int(float value)
{
return ((value >= 0) ? (int)value : (int)(value-1));
}
3-它应该起作用,但最后的返回语句可以更清楚:
return (int)val + (val>=0.0?1:-1)
4-Double与C/C++中的浮点非常相似。就像你在摆弄一个浮子,而不是双浮子。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题