2013-10-10 130 views
0

我不知道下面的想法是可行的或不可一概而論,但我想每一個計算值四捨五入到100單位圍捕。四捨五入至100單位

例如:

double x; 
int x_final; 
... 
if (x<400) x_final=400; 
else if (x<500) x_final=500; 
else if (x<600) x_final=600; 
... 
+1

乘以你確定你需要舍入到「最近的」 100(意思是四捨五入)?或者向下滾動?或收起來? –

+2

你要做的就是圍捕的方式,而不是四捨五入取最接近 –

+0

輪@RonLau起來,當然! – MelMed

回答

1

顯而易見的解決方案是使用remquo

int 
roundTo100(double x) 
{ 
    int results; 
    remquo(x, 100.0, &results); 
    return 100 * results; 
} 

你可能需要一個相當新的編譯器這一點,但是: 功能加入到C99,以及C++與C++ 11。根據 平臺上,你可能沒有它在所有,或者您可能只 有它在<math.h>(但不是在<cmath>)。如果編譯器 聲稱支持C++ 11,則應該在<cmath>中使用它。但 直到你看到它纔會相信;實際上沒有編譯器 支持C++ 11到任何真正的程度。在平臺哪裏有 是C99支持(其中包括幾乎所有的Unix平臺 和Windows在Cygwin的),它應該出現在 <math.h>不分。 (但是,它存在於視覺 影城

在此功能中由於缺少,是這樣的:

int 
roundTo100(double x) 
{ 
    int results = round(x/100); 
    return 100 * results; 
} 

可能做的伎倆。注意這兩個函數圍繞 略有不同。如果剩餘的 恰好爲50,則第一輪正在向上調整,第二輪是平穩的。第二個可能 可能引入誤差是由於(我沒有分析它足夠可以肯定的一種方式 或其他或 不—)的劃分。

根據您的x來自哪裏,舍入差異 或潛在的不準確可能不是問題。 (如果, 例如,x從一些物理測量中得到的與 只有3個十進制數字的準確性,但事實上,它可能會舍 「錯誤地」時x是遠離50由一些1E14或 喜歡可能是不相關的。 )

+0

非常感謝!爲你+1。 – MelMed

2

圍捕,您可以使用此:

x_final = ((int)x/100 + 1) * 100; 
+0

這是不正確的:((int)49/100 + 1)* 100 = 100,但最接近的100是0.我認爲一個人必須使用'round'。 – urzeit

+0

@utzrit我遵循OP的代碼,而不是描述。認爲這通常更準確。 –

+0

OP在上面的評論中澄清了他的問題。請編輯您的問題,以便我可以刪除我的downvote。 – urzeit

0

CTRY這樣的:

#include <math.h> 
... 

x_final = ceil(x/100)*100; 
0

把它通過100(忽略餘數),然後乘以100

#include <iostream> 
using namespace std; 

int main() { 
    int val = 456; 
    int r = (val/100) * 100; 
    cout << "r = " << r; 
    return 0; 
}