2010-02-20 83 views
0

考慮用戶設置的浮點值,如1.82。我如何找到下一個最高的.05值?對於給定的例子,下一個最高值是1.85。Round to Next .05 in C

有沒有簡單的方法,還是需要一個複雜的算法?我嘗試使用floorceiling函數來創建從浮點到下一個最高和最低整數的距離。但是我一旦掌握了這些信息就不知道該如何進行。

謝謝。

+0

四捨五入'N'來的'一個倍數0.05' =>四捨五入'N * 2'到下一個較大整數的'0.1'=>舍入'n * 2 * 10'的下一個倍數。你想把'0.05'加到'0.10'還是保持原樣? – 2010-02-20 17:13:50

+3

你不是用「雙」存儲錢,對嗎? – 2010-02-20 17:19:38

回答

0

一個偉大的有用的信息資源。

0

代碼@賈斯廷的回答。請注意,這很容易推廣。

#include <math.h> 
#include <stdio.h> 

int main(void) { 
    int i; 
    double numbers[] = { 
     1.82, 0.3, 0.2, 0.5, 10000000000.849, 
    }; 

    for (i = 0; i < sizeof(numbers)/sizeof(numbers[0]); ++i) { 
     double scaled = ceil(20 * numbers[i]); 
     printf("%.2f\n", scaled/20.0); 
    } 

    return 0; 
} 
0
float fixedCeil(float num, float factor) 
{ 
    float steps = 1.0f/factor; 
    return ceil(steps*num)/steps; 
} 

assert(fixedCeil(2.43f, 0.05f) == 2.45f); 

(斷言僅僅是虛構的)

0

您可以使用類似

// Rounds X to the nearest Y 
    double round(double x, double y) 
    { 
     return floor(x/y + 0.5) * y; 
    }