2010-11-08 75 views
4
double a = 2451550; 
double b = .407864; 
double c= a*b; 
cout<<c; 

我期待的結果是「999898.9892」,但得到「999899」。我需要實際沒有根據的結果。請建議。雙倍乘法給出四捨五入的結果

+4

http://docs.sun.com/source/806-3568/ncg_goldberg.html – DumbCoder 2010-11-08 10:51:55

+0

會假設它某種形式的四分之一上漲 – thecoshman 2010-11-08 10:54:59

+0

這可能有助於http://stackoverflow.com/questions/117429/inputting -large-numbers-in-c – DumbCoder 2010-11-08 11:08:47

回答

13

默認情況下,iostream輸出6位精度。如果你想要更多,你必須要求它:

std::cout.precision(15); 
+0

謝謝,但實際的問題是,我想使用「c」結果進行其他計算,而不僅僅是顯示。 – Vikas 2010-11-08 11:01:47

+8

@Vikas:再次閱讀答案 - 您已經獲得了所需的精確度 - 您只是因爲顯示價值而感到困惑。 – 2010-11-08 11:03:54

+2

您將獲得52位精度,但由於浮點算法的工作原理,它不會「精確」。 – CashCow 2010-11-08 12:24:54

1

它也可以使用像下面的機器人setprecision完成。

#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() 
{ 
double a = 2451550; 
double b = .407864; 
double c= a*b; 
cout<<setprecision(15)<<c; 
} 

此外,使用操縱器將使代碼緊湊。

0

默認情況下性病的精度:: iostream的將顯示多少位數字默認顯示精度是6所以,既然你的電話號碼有六位之前它不會顯示任何小數位小數點後。

您可以使用「固定」操縱器更改此行爲。 '精度',然後更改爲之後顯示的數字位數,這可能是您所期望的。

要始終得到四位小數點後你可以這樣做:

cout << setprecision(4) << fixed << c; 

但是,請記住,這將始終即使是零小數點後顯示四位。有沒有簡單的方法來獲得'精度'最多 x小數點後位數與std :: iostreams。