2011-03-04 102 views
1
main() 
{ 
    double d1 = 1234.1; 
    cout << "d1 = 1234.1 --> " << d1 << endl; 
    double d2 = 1234.099999; 
    cout << "d2 = 1234.099999 --> " << d2 << endl; 
} 

輸出:如何保持雙的精度在C++

d1 = 1234.1 --> 1234.1 
d2 = 1234.099999 --> 1234.1 

其實我是想打印的d2的精確值,即1234.099999,但沒有得到相同的。

請建議我如何得到確切的價值。

+0

你的代碼中有東西會丟失嗎?沒有什麼可以讓你在那裏得到d2。 – murrekatt 2011-03-04 07:43:31

+1

你可能想看看這個線程:http://stackoverflow.com/questions/4217510/how-to-cout-the-correct-number-of-decimal-places-of-a-double-value – Chan 2011-03-04 09:20:40

回答

7

你想cout.precisionhttp://www.cplusplus.com/reference/iostream/ios_base/precision/

還要注意的是D2是不太1234.099999和D1是不太1234.1

浮點數引入舍入誤差,這就是爲什麼他們四捨五入到較少的地方在默認情況下,以嘗試顯示有意義的結果。

+0

謝謝回覆。其實我有要求在字符緩衝區中存儲值(1234.099999),但我得到(1234.1)在緩衝區中,這對我造成了問題。我怎樣才能在沒有四捨五入的情況下回顧確切的價值。 – 2011-03-04 10:21:13

+1

所以你想把它存儲爲一個字符串而不是雙?這可以通過像'std :: string d2 =「1234.099999」;'? – Tim 2011-03-04 15:57:54