我正面临一个关于用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
提前谢谢你,
答案 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 ++中的浮点数。好像你弄乱了浮子,而不是加倍。