2012-01-27 66 views
5

我有浮點數精度的一個問題:輸出到流浮點數精確

int main(void) { 
    double b = 106.829599; 
    float a = b; 
    std::cerr << std::setprecision(6) << "a = " << a << "; b = " << b << std::endl; 
    std::cerr << std::setprecision(7) << "a = " << a << "; b = " << b << std::endl; 
} 

結果是:

一個= 106.83; b = 106.83

a = 106.8296; B = 106.8296

所以,我的問題是,爲什麼在第一行數字是如此之短(我期待看到106.829)

GCC 4.1.2,也是我在LWS

回答

8

做了一個試驗實際上,106.829599四捨五入爲6位(小數點後三位)爲106.830,顯示爲106.83,因爲給予setprecision的6位數精度僅爲最大值。

小數精度決定的位數的最大數爲寫在插入操作 表達浮點值。

您可能正在尋找的是將setprecision與fixed相結合。