可能重複:
Rounding Number to 2 Decimal Places in CC++四捨五入至_nths放置
我目前在Linux機器上學習C++。我已經得到了下面的代碼用於舍入或相應的數字,但只有整數。我將如何將此代碼更改爲百位或其他小數位?我不會問,如果我沒有嘗試到處尋找已經:(和一些答案似乎有一噸的行似乎是一個簡單的功能!
double round(double){
return floor(value + 0.5);
}
可能重複:
Rounding Number to 2 Decimal Places in CC++四捨五入至_nths放置
我目前在Linux機器上學習C++。我已經得到了下面的代碼用於舍入或相應的數字,但只有整數。我將如何將此代碼更改爲百位或其他小數位?我不會問,如果我沒有嘗試到處尋找已經:(和一些答案似乎有一噸的行似乎是一個簡單的功能!
double round(double){
return floor(value + 0.5);
}
嘗試
double round(double value)
{
return floor(value*100 + 0.5)/100;
}
。到
請注意,當尾數足夠大時,這將不起作用。 – 2010-07-13 12:54:24
@Kirill爲什麼不呢? – Tek 2010-07-13 13:16:00
@Tek:我認爲Kirill意味着如果指數(而不是尾數)太大,使得'value * 100'大於'numeric_limits
圓到小數點後兩位要做到這一點一般,使用你已經得到了相同的功能,但輸入向上或向下移動了一些小數:
double round(double value, int precision)
{
const int adjustment = pow(10,precision);
return floor(value*(adjustment) + 0.5)/adjustment;
}
(請注意,您必須使用#include <math.h>
或#include <cmath>
才能使用pow功能。如果你想寫出這種情況(不那麼強大)POW,你可以嘗試somrething像:
int intpow(int value, int power)
{
int r = 1;
for (int i=0; i<power; ++i) r *= value;
return r;
}
[編輯@奔福格特的評論]僅計算調整一次。
不需要像這樣兩次計算'10 **精度'。 – 2010-07-13 12:55:05
我想補充一點:pow(10,precision) 應該是:const int adjustment = pow((double)10,precision); 我搞砸了我的Linux編譯器,儘管前者工作過,當我試圖將相同的代碼交叉編譯到Windows時,pow(int,int&)的調用超載爲「模糊」。結果10(基地)應該是一個浮點值,而不是一個整數。 – Tek 2010-07-14 07:44:52
是否要存儲舍入的數字,還是隻是爲了將其顯示給用戶而進行舍入? – 2010-07-13 12:47:49