2014-10-28 36 views
-1

我有一個代碼塊涉及將浮點數舍入到最近的上部x的問題。我想要做的就是拿出我擁有的任何數字並將它舍入到下一個最高的x。我的代碼似乎80%的時間工作,但最近發現一些情況下,它不會返回我期望的數字。例如,如果我想將它舍入到下一個最高500,下面的代碼顯示了我會擁有的。如何將一個數字四捨五入到最接近的x增量值

CGFloat number = 3780; roundedNumber = 500 *ceilf(number/500 +.5);

在這裏,我期望的答案返回4000相反,它返回4500人。

上面的數學是否有一些我缺少/不理解?爲什麼只是在某些情況下,這似乎「過度」了我的數字?有沒有比這更簡單的方法來獲得我所追求的?

+0

我知道分數此重複會談[Objective-C的舍入浮到最近的0.05](http://stackoverflow.com/questions/5678562/objective-c-rounding- float-to-the-nearest-05),但是你可以修改它來處理100. – 2014-10-28 21:37:57

+0

因爲你既使用'ceilf',也使用'.5'進行「手動」舍入,所以你四捨五入。 – 2014-10-28 21:38:47

+0

'500 * round(number/500)' – rmaddy 2014-10-28 23:06:03

回答

0

基本上:

3780 /500 + 0.5 -> 7.56 + 0.5 -> 8.06 
ceil(8.06) -> 9 
9 * 500 -> 4500 
相關問題