1

RINEX ファイルの行から複数​​の数値を読み込もうとしています。ファイル番号は次のようになります。

12345.67890

ただし、RINEX の書式設定により、12345.6789 は測定値を表し、小数点以下の 0 は実際には別のものを表します。私は基本的な読み取り方法を使用しています:

Rinexfile>>double_temp;

そして、やりたい場所で double_temp=12345.67890 を取得します

Rinexfile>>double_temp>>int_temp;

double_temp=12345.6789 および int_temp=0 を持っています。フォーマットは常に同じです。つまり、double に属する 4 つの小数、次に int で、VS2010 を使用しています。

ありがとう

4

3 に答える 3

1

より洗練されたアプローチが必要です:

std::string word;
Rinexfile >> word;
std::size_t dot_pos = str.find('.');
if (dot_pos != std::string::npos) {
    std::string doublePart = word.substr(0, dot_pos + 1 + 4);  // 4 decimals
    std::string intPart = word.substr(dot_pos + 1 + 4);
    std::istringstream is(doublePart), is2(intPart);
    is >> double_temp;
    is2 >> int_temp;
}

これは、単一の形式で入力を読み取り、std::stringそれを 2 つの部分に分割します。記号とそれに続く 4 文字doublePartを含む文字列です。残りの単語です。値を取得するために、の一時的なインスタンスが構築されます。'.'intPartstd::istringstream

注: 追加のエラー処理が必要になる場合があります。

于 2013-10-05T18:44:53.470 に答える
0

文字列をいじりたくない場合は、整数部分と小数部分を別々に読み取って、必要なデータを次のように取得できます。

cin >> i;
cin.get();  // skip decimal point
cin >> d;

double value = i + (d / 10) / 10000.0;
int something_else = d % 10;

cout << setprecision(4) << fixed << value << endl << something_else;

(「何か他のもの」が1桁を超えると機能しません)

于 2013-10-05T18:56:44.780 に答える