从Visual Basic向C++发布代码 我面临的是C++中的一组源代码在VisualBasic中的翻译问题。在代码中,有一个对Sign VB方法的调用和浮点到整数的各种转换。。。您能确认1, 2, 3的C++代码与VB代码相同吗?此外,关于隐式转换,我不知道转换是如何执行的,见4。有什么想法吗

从Visual Basic向C++发布代码 我面临的是C++中的一组源代码在VisualBasic中的翻译问题。在代码中,有一个对Sign VB方法的调用和浮点到整数的各种转换。。。您能确认1, 2, 3的C++代码与VB代码相同吗?此外,关于隐式转换,我不知道转换是如何执行的,见4。有什么想法吗,c++,vb.net,C++,Vb.net,1方法标志Visual Basic //C++ int sign(float value) { if (value < 0) return -1; else if (value == 0) return 0; else return 1; } 3方法CInt Visual Basic //C++ int Int(float value) { return ((value >= 0) ? value : floor(value));

1方法标志Visual Basic

//C++
int sign(float value)   
{ 
    if (value < 0) return -1; 
    else if (value == 0) return 0; 
    else return 1; 
}
3方法CInt Visual Basic

//C++
int Int(float value) 
{ 
    return ((value >= 0) ? value : floor(value)); 
}
//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)); 
}
提前谢谢你,

1- 这是不同的,在本例中,浮点值不应与常量变量0进行比较。因此,这是一个更好的代码:

const float epsilon = 0.00001f;

if(value < -epsilon) return -1;
if(value > epsilon) return 1;
return 0;
3-它应该可以工作,但最后的返回语句可以更清楚:

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

4-double与C/C++中的float非常相似。就好像你在处理一个浮点,而不是双精度浮点。

哦,不,VB会生成溢出异常。编写测试,比较结果直到你高兴。谢谢回复,我不知道我是否已经清楚了,但是我希望我用C++编写的方法和Visual Basic的方法有完全相同的行为。我不确定VisualBasic方法的行为。似乎Cint是一个很好的解决方案。
int Int(float value) 
{ 
    return ((value >= 0) ? (int)value : (int)(value-1)); 
}
return (int)val + (val>=0.0?1:-1)