我正在开发一种 C++ 算法,给定一个浮点数作为输入,它会返回最接近以 50 结尾的数字的值。抱歉,我不知道如何更好地解释它。举个例子,我的意思是,我需要这些数字:50、150、250、350、450、550 等。
换句话说,如果输入值介于 之间,[1050, 1100)
则返回 1050,但如果输入值介于 之间[1100, 1150]
,则返回 1150。
所以,这是我的算法,仅在输入值等于或大于 1000.0 时才有效:
- 将输入值除以 100.0。
- 取小数部分
- 如果分数部分大于或等于 0.0 且小于 0.5,则整数部分加 1。
- 整数部分乘以 100。
- 结果加上 50。
当输入为701.272时,它返回850.0,但它应该返回750.0。
如果输入数字小于 1000,则问题可能是除以 100 并乘以 100。
我该如何修复这个算法?
实际上,问题非常简单,您需要特别关心的唯一值是
0
和 的任何精确倍数100
,因为您想将其向下舍入。对于其他每个数字,它只是该数字的整百(例如 1134.567 -> 1100),然后加上 50。即,任何严格大于 100 且严格小于 200 的数字,您想要的结果是 150。
不能 100% 确定您对输入的期望
0
。我目前假设 50。但是如果您想将其处理为类似于 100、200...,答案可能是 -50,您可以删除对0
编辑抱歉,我误读了您的舍入条件(没有看到 中的圆括号
[1050, 1100)
),因此您实际上想要精确地舍入100 的倍数。在这种情况下,您根本不需要任何特殊处理。然后你就可以做