考慮用戶設置的浮點值,如1.82。我如何找到下一個最高的.05值?對於給定的例子,下一個最高值是1.85。Round to Next .05 in C
有沒有簡單的方法,還是需要一個複雜的算法?我嘗試使用floor
和ceiling
函數來創建從浮點到下一個最高和最低整數的距離。但是我一旦掌握了這些信息就不知道該如何進行。
謝謝。
考慮用戶設置的浮點值,如1.82。我如何找到下一個最高的.05值?對於給定的例子,下一個最高值是1.85。Round to Next .05 in C
有沒有簡單的方法,還是需要一個複雜的算法?我嘗試使用floor
和ceiling
函數來創建從浮點到下一個最高和最低整數的距離。但是我一旦掌握了這些信息就不知道該如何進行。
謝謝。
乘以20,爲Rounding methods使用吊頂,除以20
一個偉大的有用的信息資源。
代碼@賈斯廷的回答。請注意,這很容易推廣。
#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;
}
float fixedCeil(float num, float factor)
{
float steps = 1.0f/factor;
return ceil(steps*num)/steps;
}
assert(fixedCeil(2.43f, 0.05f) == 2.45f);
(斷言僅僅是虛構的)
您可以使用類似
// Rounds X to the nearest Y
double round(double x, double y)
{
return floor(x/y + 0.5) * y;
}
四捨五入'N'來的'一個倍數0.05' =>四捨五入'N * 2'到下一個較大整數的'0.1'=>舍入'n * 2 * 10'的下一個倍數。你想把'0.05'加到'0.10'還是保持原樣? – 2010-02-20 17:13:50
你不是用「雙」存儲錢,對嗎? – 2010-02-20 17:19:38