将代码从Visual Basic转移到C++问题

Moving code from Visual Basic to C++ issue

本文关键字:C++ 问题 转移 Basic 代码 Visual      更新时间:2023-10-16

我面临着一个关于用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++中的浮点非常相似。就像你在摆弄一个浮子,而不是双浮子。