2015-01-07 123 views
4

對於我的作業,我應該從文件中讀取雙精度值並對它們進行排序。這些是一些價值。但是,當用我的代碼讀取它們時,打印測試它們是以整數形式寫入的。從文件中讀取雙精度

std::ifstream infile (in_File); 
double a; 
while(infile>>a) 
{ 
    std::cout<<a<<std::endl; 
} 

我的雙打開始185261.886524然後237358.956723

而且我的代碼打印的185262然後237359再等等。

+5

適合我。你可以發佈你的文件的內容? – bgoldst

+0

185261.886524 237358.956723 139921.832662 128702.977104 93468.067919 415572.438294 394341.383634 317808.343493 63075.462939 907012.789025 393656.286891 418873.927354 892347.117718 764276.357958 300568.750436 717272.259456 354591.446610 431749.187142 63565.857898 288241.215494 526117.693273 680793 0.623315 68218.415160 391965.952529 66870.811087 3982.888630 469794.327128 492466.036574並繼續 –

+0

其實我想添加圖片,但系統不允許我 –

回答

6

試着在你main()頂部添加此:

setlocale(LC_ALL, "C"); 

This會給你的程序中的「C」語言環境,而不是當地的一個。我想象你的本地人使用「,」作爲小數點而不是「。」。就像你的數據一樣。

您還需要在文件頂部添加#include <clocale>

編輯:那麼,爲了得到更精確,你可以做#include <iomanip>,做這在程序的頂部:

std::cout << std::setprecision(20); 

setprecision變化總位數是多少打印。

+0

我試過了,但它不起作用。是我們在本地使用「,」。當我寫入文件2時。33它可以很好地工作,但是當數字變大時,例如185261.886524它會得到185262 –

+0

嘗試使用一些不同的數字來找出究竟哪些工作正常,哪些不正確。 –

+0

1852.88也可以工作,然後變得不工作。1852.887成爲1852.88 –

0

如果在您的系統上您的本地化設置具有與.不同的小數點分隔符,則會發生這種情況。嘗試添加以下包括:

#include <locale> 

,然後使用imbue方法:

std::ifstream infile (in_File); 
infile.imbue(std::locale("C")); 
double a; 
while(infile>>a) 
{ 
    std::cout<<a<<std::endl; 
} 
1

你的問題不是輸入,但輸出:cout默認打印一個double的6位數字,這是爲什麼你看到四捨五入的值185262,而不是185261,正如你對錯誤輸入所期望的那樣。使用std::setprecision可以提高輸出精度。