将正数四舍五入到下一个最接近的 5 的倍数

新手上路,请多包涵

我需要将一个数字(输入保证为整数且为正数)四舍五入到下一个 5 的倍数。

我试过这个:

 int round = ((grades[j] + 2)/5) * 5;

但是,这会将数字四舍五入到最接近的 5 的倍数。

例如:67 四舍五入到 65,而不是 70。

原文由 user5979025 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

总结一般形式应该是:

 ((n + denominator -1) / denominator )* denominator

所以在你的情况下:

 int round = ((grades[j] + 4)/5) * 5;

我们从分母中减去 1 的原因是为了处理舍入值的精确倍数,例如:

 ((70 + 4) / 5) * 5

会产生 70

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以取 grades[j] 和下一个数字之间的差异,然后添加它。例如,如果 grades[j] == 12 那么 12 mod 5 == 2 ,那么添加 5 - 2

这是一个测试它的示例程序:

 #include <iostream>

int main() {
    int x[] = {2,7,123,32}; // some random numbers to show how this works
    for (int i = 0; i < 4; {
        std::cout << x[i] << "\t" << x[i] + ((5-(x[i] % 5)) % 5) << std::endl;
    }
    return 0;
}

输出:

 2   5
7   10
123 125
32  35

原文由 CIsForCookies 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题