0

こんにちは、私の質問は単純に見えますが、テキストファイルから膨大な数を読み取ろうとしていますが、正しく実行できません。

次のファイルの保存を見てくださいfile1.text file1.text

私は次のような構造を持っています:

struct PDW_FileFormat
{
    float TOA;
    float Freq;
    float  PW;  
    float  PA[10];  
    float  PASlc1;
    float  PASlc2;
    float  PAOmni;
    float  AZ_Angle;
    float  EL_Angle;
    float EST_Az_Angle;
    float EST_El_Angle;
    float Cdiff;
    unsigned int index_in_packet;

};

次のコードのようにファイルを開いて読み取る

PDW_FileFormat filedata;
    unsigned index_in_packet=0;
p = fopen("file1.txt" ,"r");
while (!feof(p))
    {
        memset(&filedata,0,sizeof(PDW_FileFormat));
        fscanf(p ,"%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f"
                      ,&filedata.TOA    //1
                      ,&filedata.Freq   //2
                      ,&filedata.PW     //3
                      ,&filedata.PA[0]  //4
                      ,&filedata.PA[1]  //5
                      ,&filedata.PA[2]  //6
                      ,&filedata.PA[3]  //7
                      ,&filedata.PA[4]  //8
                      ,&filedata.PA[5]  //9
                      ,&filedata.PA[6]  //10
                      ,&filedata.PA[7]  //11
                      ,&filedata.PA[8]  //12
                      ,&filedata.PA[9]  //13
                      ,&filedata.PASlc1 //14
                      ,&filedata.PASlc2 //15
                      ,&filedata.PAOmni //16
                      ,&filedata.AZ_Angle   //17
                      ,&filedata.EL_Angle); //18

          filedata.index_in_packet = index_in_packet;
          // some code to convert a value like
              // 1.386500000000000e+10
              // to 
              // 138650000000000

              INT64 TOAConvert;
              //**your code or your answer **
          index_in_packet++;
     }

私はこのコードを試しましたが、うまくいきません。

//filedata.TOA = 1.3865000e+010
              INT64 variabletoConvert;
          stringstream ss;
          ss.setf(ios::fixed);
          ss.precision(0);
          ss << filedata.TOA;
          ss >> variabletoConvert;
          // variabletoConvert = 13864999936 i expect 138650000000000
          INT64 variabletoConvert2;
          variabletoConvert2 = static_cast<INT64>(filedata.TOA);
          //variabletoConvert2 = 13864999936 i expect 138650000000000   
          INT64 variabletoConvert3;
          variabletoConvert3  = (INT64)(filedata.TOA);
          //variabletoConvert3 = 13864999936 i expect 138650000000000 

このデバッグイメージを見てください: ここに画像の説明を入力してください

4

1 に答える 1

0

さて私はこの解決策を実行しましたが、それは膨大な数の一部をカバーし、誰かが完全な数を取得するための解決策をリリースした場合、私はそれを答えとしてマークします4バイトのフロートに保存することを余儀なくされた数を回復する可能性があります。 ... !!

#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    float inputvalue;
    std::cout <<"Enter a large number" <<endl
              <<"system will save it in a float variable" <<endl
              <<"Your Number =";
    std::cin >> inputvalue;
    float temp;
    temp = inputvalue;
    int numberDigits =0;
    double DivisionCount= 1;
    while (temp > 1)
    {
        numberDigits++;
        DivisionCount*=10;
        temp = temp / 10;
    }
    temp = inputvalue;
    int middlevar=0;
    double Outputvalue=0;
    for (int i =0;i < numberDigits ; i++)
    {
    DivisionCount /= 10;
    middlevar =temp / DivisionCount;
    temp = temp - (middlevar * DivisionCount);
    Outputvalue *= 10;
    Outputvalue+= middlevar;
    }
     cout << endl << "Your value saved in memmory"<<Outputvalue;
    cin.get();
    cin.get();
    return 0;
}
于 2013-03-01T19:59:15.493 に答える