2017-02-26 33 views
-1

我得到了一些問題,C++四捨五入我的號碼...爲什麼C++輪了我的雙? (如19.9999998變爲20)

我的代碼是:

double w, semiw; 
cin >> w; 
semiw = w/2.0; 
cout << "w : " << w << "; semiw : " << semiw << endl; 

其中,由於控制檯輸入時19.9999998回報:

w : 20; semiw : 10 

而不是

w : 19.9999998; semiw : 9.9999999 

爲人們可以期待。我想保持精度double應該提供,這是根據this page,15位有效數字。我怎樣才能做到這一點?在此先感謝您的答案:)

+0

浮點並不確切。我建議你閱讀[浮點數學是否被破壞?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken)和[每個計算機科學家應該知道的浮點算術]( https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –

+4

@JesperJuhl我不認爲這是相關的。 – HolyBlackCat

+0

也許不是(雖然有一些四捨五入的發生)。仍然很好的閱讀;-) –

回答

1

拉昇輸出設置setprecision

cout << setprecision(16) << "w : " << w << "; semiw : " << semiw << endl;