我正在开发一种 C++ 算法,给定一个浮点数作为输入,它会返回与以 50 结尾的数字最接近的值。抱歉,我不知道如何更好地解释它。举个例子,我的意思是,我需要这些数字:50、150、250、350、450、550 等。
换句话说,如果输入值在
[1050, 1100)
之间,它将返回1050,但是
如果值在 [1100, 1150]
之间,则返回 1150。
所以,这是我的算法,仅当输入值等于或大于 1000.0 时才有效:
当输入为701.272时,它返回850.0,但它应该返回750.0。
如果输入的数字小于 1000,可能问题是除以 100 并乘以 100。
我该如何修复这个算法?
如果您将概述的算法应用到测试值中,您将直接看到问题出在哪里:
1) 701.272 / 100 = 7.01272
2) frac := 0.01272
3) frac is in [0, 0.5] thus adding: 7+1 = 8 (here is the issue)
4) Scale up: 8*100 = 800
5) Add: 800+50 = 8500
正如我们所看到的,问题出现在步骤 3 中。这里您遇到了 if else 情况的问题。你只需要增加整数值,当
frac in [0.5, 1)
!