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

时间:2012-01-11 17:57:47

标签: c++ vb.net

我正面临一个关于用Visual Basic编写的一堆源代码的C ++翻译问题。在代码中有一个方法Sign(VB)的调用和float到整数的各种转换...你能否确认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 :(得分:0)

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的float变量,请使用(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-双打非常类似于C / C ++中的浮点数。好像你弄乱了浮子,而不是加倍。