将十进制数保持在一个范围内
Keeping a decimal number within a range
如果我有一个代表一个角度的十进制数,我把它加到另一个角度,我怎么能确保它保持在0°和359°之间?所以如果是120°+ 270°,就是30°而不是390°?我可以检查它们是否大于或小于极限然后加减360°,但如果结果大于360°呢?我会用模,但我不确定它对小数和负数有什么作用。我也可以使用一个循环,增加/减少360,直到它在范围内,但我不确定这是不是一个好主意。(我实际上是用弧度来做的,用角度来解释更容易)
可以使用模数运算。对于整数,这是%
运算符,对于浮点,你可以使用std::fmod
// brief Calculates the sum of two angles
// param[in] a First angle [degrees]
// param[in] b Second angle [degrees]
// return Sum of two angles [degrees, [0, 360)]
double AddAngles(double a, double b)
{
const double totalAngle = a + b;
if (totalAngle >= 0.0)
{
return std::fmod(totalAngle, 360.0);
}
else
{
return 360.0 - std::fmod(-totalAngle, 360.0);
}
}
演示int main()
{
std::cout << AddAngles(30.0, 450.0) << std::endl
<< AddAngles(50.0, 80.0) << std::endl
<< AddAngles(180.0, 180.0) << std::endl
<< AddAngles(-180.0, -270.0) << std::endl;
}
输出120
130
0
270
相关文章:
- 不计算一个范围内的完美数
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- 从大范围内生成一个随机数,但从大范围的中间开始生成较小的范围
- 为什么C++找不到布尔运算符,当有一个!范围内的运算符?
- C :在一个范围内计数偶数 /奇数
- 如何创建一个结构的实例,当它不在范围内时,该实例将不会被删除
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- 是否可以在全球范围内声明一个提升线程
- 在一个范围内的阵列中找到三胞胎
- 如何检查一个范围内的值是否是另一个范围内的值的倍数
- 正在检查排序列表中是否有一个范围内的数字
- 有一个标准的算法可以在一个范围内迭代吗
- 在一个范围内生成不同的随机数
- 使用srand(time(0))猜测一个范围内的数字
- Qt QXYSeries和ChartView -修改悬停行为在一个范围内触发
- 在一个范围内查找素数的直观方法
- 一个范围内的成功随机数
- 如何在C++的另一个范围内使用局部变量
- 将十进制数保持在一个范围内