2014-02-10 321 views
1

我有一個問題需要翻倍。我鑄造兩個字符串倍增,一個良好鑄造,另一種是鑄造爲int,然而,這是相同的代碼..Qt toDouble()方法強制轉換爲int

QTextStream lecture(&file); 
ligne = lecture.readLine(); 
double x = ligne.split(" ")[0].toDouble(); 
double y = ligne.split(" ")[1].toDouble(); 
std::cout << " x en string = " <<ligne.split(" ")[0].toStdString() << "; y en string = " << ligne.split(" ")[1].toStdString() << std::endl; 
std::cout << " x = " << x << "; y = " << y << std::endl; 

這是結果

x en string = 988284.9; y en string = 6429241.49999999 
x = 988285; y = 6.4496e+06 

如果你看到結果,x不是小數。

+0

你能告訴我們什麼是ligne? – 4pie0

+0

是的,我編輯了我的文章。但字符串轉換是好的,所以我不認爲它來自ligne –

+0

,這只是四捨五入我相信 –

回答

4

x實際上是正確的值。

您的問題實際上是在這裏:

std::cout << " x = " << x ; 

因爲你的6位數字,這是不夠的代表。」 9" 默認精度。它應該是這樣的:

std::cout << " x = " << std::setprecision(8) << x 

一個更好的價值,其輸出:

x = 988284.9; y = 6429241.5 

注意:您需要

#include <iomanip> 

查看setprecision()(和其他流操縱http://en.cppreference.com/w/cpp/io/manip/setprecision其它附加信息)

+0

你是什麼意思? assign(double x = ligne.split(「」)[0] .toDouble();)很好,它的輸出是錯誤的(隨意用英語和法語提問細節,我會用兩種語言) – Armaghast

+0

Ho okey,所以如果我想使用x,我可以肯定它包含值的精度? –

+1

x包含988284.9。稍後使用它(添加等)將使用它的值(988284.9)。但是,當你做一個std :: cout時,你只能得到有限數量的數字(6是默認值,988284.9 = 988285的6位數 - 四捨五入到最接近的數字)。如果你想看更多的數字,你需要使用setprecision()來請求更多的數字。但是這僅僅是使用std :: cout的輸出,單獨x是很好的。注意:對於數字數量較多的數字,字符串和double之間可能有一個小的差異,因爲double也具有有限的精度(應該足夠)。 – Armaghast

相關問題