2010-07-13 37 views
3

可能重複:
Rounding Number to 2 Decimal Places in CC++四捨五入至_nths放置

我目前在Linux機器上學習C++。我已經得到了下面的代碼用於舍入或相應的數字,但只有整數。我將如何將此代碼更改爲百位或其他小數位?我不會問,如果我沒有嘗試到處尋找已經:(和一些答案似乎有一噸的行似乎是一個簡單的功能!

double round(double){ 
return floor(value + 0.5); 
} 
+2

是否要存儲舍入的數字,還是隻是爲了將其顯示給用戶而進行舍入? – 2010-07-13 12:47:49

回答

7

嘗試

double round(double value) 
{ 
    return floor(value*100 + 0.5)/100; 
} 

。到

+4

請注意,當尾數足夠大時,這將不起作用。 – 2010-07-13 12:54:24

+0

@Kirill爲什麼不呢? – Tek 2010-07-13 13:16:00

+1

@Tek:我認爲Kirill意味着如果指數(而不是尾數)太大,使得'value * 100'大於'numeric_limits :: max()',那麼計算就會溢出並給出一個無窮大的結果或浮點異常。 – 2010-07-13 13:23:07

3

圓到小數點後兩位要做到這一點一般,使用你已經得到了相同的功能,但輸入向上或向下移動了一些小數:

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; 
} 

[編輯@奔福格特的評論]僅計算調整一次。

+3

不需要像這樣兩次計算'10 **精度'。 – 2010-07-13 12:55:05

+0

我想補充一點:pow(10,precision) 應該是:const int adjustment = pow((double)10,precision); 我搞砸了我的Linux編譯器,儘管前者工作過,當我試圖將相同的代碼交叉編譯到Windows時,pow(int,int&)的調用超載爲「模糊」。結果10(基地)應該是一個浮點值,而不是一個整數。 – Tek 2010-07-14 07:44:52