我不知道下面的想法是可行的或不可一概而論,但我想每一個計算值四捨五入到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;
...
我不知道下面的想法是可行的或不可一概而論,但我想每一個計算值四捨五入到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;
...
顯而易見的解決方案是使用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或 喜歡可能是不相關的。 )
非常感謝!爲你+1。 – MelMed
CTRY這樣的:
#include <math.h>
...
x_final = ceil(x/100)*100;
把它通過100(忽略餘數),然後乘以100
#include <iostream>
using namespace std;
int main() {
int val = 456;
int r = (val/100) * 100;
cout << "r = " << r;
return 0;
}
乘以你確定你需要舍入到「最近的」 100(意思是四捨五入)?或者向下滾動?或收起來? –
你要做的就是圍捕的方式,而不是四捨五入取最接近 –
輪@RonLau起來,當然! – MelMed