2016-08-24 16 views
1

ストリーム入力演算子をオーバーロードすることでC++で列ファイルを読み込もうとしています。 これは、ファイル内の各行を読み込むための主な機能です:演算子でC++文字列変換をdoubleにする>>

#include <fstream> 
#include <iostream> 
#include <iomanip> 
#include <sstream> 
#include <string> 
#include <vector> 

using namespace std; 
typedef vector <double> record_t; 

istream& operator >> (istream& ins, record_t& record) 
{ 
    record.clear(); 

    string line; 
    getline(ins, line); 

    stringstream ss(line); 
    double f; 
    while (ss >> f) 
    record.push_back(f); 

    return ins; 
} 

、ほとんどの場合、かなりうまく動作します。
しかし55000.0代わりの55000.003520
が、私はそれがすべての桁で正しい値を読むことができますどのような方法があるので、最初のフィールドが格納されている?

55000.003520 -0.009740 0.000721 -0.024600 0.000000 

このライン用

ご協力いただきありがとうございます。数が実際に読んで、正しく保存されている

:問題への答えをアーカイブに

+4

55000.000000のみが保存されていることを確認していますか?これは実際の値を出力するために使用するもののように見えるので、単に6桁の有効数字に丸められます。 –

+1

私の誤りは、 'cout << setprecision(15)<< t [0];で出力値を出力すると' 55000.00352'となります。ヒントをありがとう! – joaoFaria

+1

'std :: fixed'を使うこともできます – DimChtz

答えて

0

。 OPのチェック方法は、単にデフォルトの出力精度が非常に限られているcoutに配管するだけでした。そのため、多くの数字は印刷のために丸められました。

関連する問題