2017-09-15 80 views
2

在解決一個特定網站上的一個問題,我寫了這個代碼:關於C型雙查詢++

#include <iostream> 
int main() 
{ 
    long l{12345678912345}; 
    char ch{'a'}; 
    double d{14049.30493}; 
    std::cout << l <<'\n' << ch <<'\n' << d <<'\n'; 

    return 0; 
} 

出人意料的是,雙的產量14049.3,不完整號碼。如果我明確提到

std::cout.precision(10); 

然後它打印完整的數字。我究竟做錯了什麼?

+0

閱讀http://floating-point-gui.de/ –

+0

如果'std :: court.precision(10)'「修復」了這個問題,它不應該相當自我解釋問題是什麼嗎? – George

+0

@DreamsOfElectricSheep不,對我來說。 C++中使用double的精度是否有一個通用規則?我找不到。 – anotherone

回答

7

std::basic_ios::init確定的默認精度爲6,這意味着輸出限制爲6位數,除非逗號前需要更多數字。

注意,precision設置考慮所有數字(即逗號之後之前)在確定如何逗號後的數位可以被印刷。

+0

好極了!謝謝。另外:這是否意味着該數字在後面的計算中也會被截斷,如果有的話,該變量? – anotherone

+3

@ add349不,它不。它只是標準輸出中的表示。 – Ron

-1

你沒有做錯什麼。事實上,你已經解決了這個問題!

std::cout趨向於四舍五入以避免打印異常大的十進制數。這就是爲什麼您可以設置精度來在點後面打印固定數量的數字。

+0

任何規則四捨五入?這是否意味着該數字在後面的計算中也會被截斷,如果有的話,該變量? – anotherone

+0

這個double在計算中沒有被舍入。正如@RustyX在另一個答案中所說的,''默認精度爲6 – Baksteen