我试图将负角度(以度为单位)转换为正角度。但我收到编译错误说:
test.cpp类型为'double'且'int'为二进制'operator%'的无效操作数 test.cpp类型为'float'的操作数无效,而'int'为二进制'operator%'
的操作数无效
我的代码:
double to_positive_angle(double angle)
{
return ((3600000 + angle) % 360);
}
float to_positive_angle(float angle)
{
return ((3600000 + angle) % 360);
}
很明显,因为我试图在Float和Double上使用Modulus运算符。
我能否成功地将负角度(浮动)转换为正角度(浮动)?或者我可以克服模数编译错误的方法?
答案 0 :(得分:10)
此版本适用于所有可能的输入,而不仅仅是大于3600000的输入,并解决了您遇到的%
问题。
double to_positive_angle(double angle)
{
angle = fmod(angle, 360);
if (angle < 0) angle += 360;
return angle;
}
答案 1 :(得分:5)
您不能在浮点类型上使用模运算符。您应该使用fmod
。
return fmod( 3600000.0 + angle, 360.0 );
请注意上述操作中可能引入的舍入和精度错误。
答案 2 :(得分:4)
好吧也许我有点慢,但我不确定你为什么要使用3600000.0常数。
如果您只想将负角度转换为正值,则只需添加360.0直到获得正数。
double to_positive_angle(double angle)
{
angle = fmod(angle, 360);
while(angle < 0) { //pretty sure this comparison is valid for doubles and floats
angle += 360.0;
}
return angle;
}
答案 3 :(得分:0)
我认为这是最聪明的方法:
void get_positve_angle(double theta)
{
return fmod(fmod(theta,360)+360,360);
}