2012-01-11 25 views
1

我正在面对有关在C++中使用Visual Basic编写的一堆源代码进行翻译的问题。在代码中调用方法Sign(VB),并将float的各种转换转换为整数...您能否确认1,2,3的C++代码与VB的代码相同?另外关于隐式转换,我不知道转换是如何执行的(见4)。任何想法?将代码从Visual Basic移至C++问题

1)方法注册(Visual Basic)中

//C++ 
int sign(float value) 
{ 
    if (value < 0) return -1; 
    else if (value == 0) return 0; 
    else return 1; 
} 

2)方法诠释(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

嗯,不,VB会产生溢出异常。写测试,比较结果,直到你快乐。 – 2012-01-11 18:18:39

回答

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的浮点变量,请使用(int)f。如果你想-6,使用此功能:

int Int(float value) 
{ 
    return ((value >= 0) ? (int)value : (int)(value-1)); 
} 

3-它应该工作,但最后return语句可以更加清楚:

return (int)val + (val>=0.0?1:-1) 

4-双打是非常非常类似于C到漂浮/ C++。就好像你在搞浮球一样,而不是加倍。

+0

感谢您的回复,我不知道我是否清楚,但我希望用C++编写的方法具有与Visual Basic方法完全相同的行为。而且我不确定Visual Basic方法的行为。看来,Cint是一个四舍五入的人。 – 2012-01-12 19:28:18