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