我试图在 C++ 中使用下面的公式。我将两个变量都声明为整数,我希望它们四舍五入,但它们似乎正在四舍五入。我已经查看了这个,但似乎无法找到问题所在。任何帮助将不胜感激。
int user_degrees_latitude, user_degrees_longitude;
const int lat_const=(-90)
const int long_const=(-180)
sector_latitude = (user_degrees_latitude - lat_const) / (10);
sector_longitude = (user_degrees_longitude - long_const) / (10);
扇区纬度的答案应该是 13,扇区经度的答案应该是 11,但计算机分别将每个向下舍入到 12 和 10。
原文由 user3064203 发布,翻译遵循 CC BY-SA 4.0 许可协议
虽然这个线程很老,但我很遗憾看到两个现有的答案都转换为浮点数,然后又转换回整数。如果您想将
n
除以d
并将商四舍五入到最接近的整数,所有这些都使用仅整数算术,那么您只需在除法之前添加d/2
:(Of course,
d/2
could be writtend>>1
, but the compiler will do that for you.) So, ifn
is 19 andd
是 4,确切的商将是 4.75,n/d
将产生 4(向零截断),但上面的公式将产生 5,这是所需的结果。对于 OP 中给出的示例,只需将最后两行更新如下:编辑:有人指出(感谢@kees-jan),如果
n
如果n
和d
有不同的标志,则此解决方案将不起作用从而产生负商。下面是一个更完整的解决方案,它仍然避免了昂贵的 int-float-int 转换: