1

このようなデータを含むファイルがあります

USDINR12AUGFUT 58 1344396605 627906 2012-08-08 09:00:05 TRADE 55.1600 2 55179.50 839 USDINR12AUGFUT 59 1344396605 627910 2012-08-08 09:00:05 TRADE 55.1600

私のCコードでは、この行を介してファイルからこのデータを読み取ります

void as(char line[300])
{
    sscanf(line,"%s %lf %lf %lf %s %s %s %lf %ld %lf %ld",symbol, &trade_no, &utc_sec,&utc_nano,date,time,trade_type,&ltp,&ltq,&vwap,&volume);
        if (!strcmp(trade_type,"BID"))
        {
        cout<<endl;
        printf("%s %lf %lf %lf %s %s %s %lf %ld %lf %ld\n",symbol,trade_no,utc_sec,utc_nano,date,time,trade_type,ltp,ltq,vwap,volume);

//      cha/i);
        }

        else if (!strcmp(trade_type,"ASK"))
        {
        cout<<endl;
        printf("%s %lf %lf %lf %s %s %s %lf %ld %lf %ld\n",symbol,trade_no,utc_sec,utc_nano,date,time,trade_type,ltp,ltq,vwap,volume);
//      char li[100] = "Only Ask.txt";
//      wr(li);
        }

        else if (!strcmp(trade_type,"TRADE"))
        {
        cout<<endl;
        printf("%s %lf %lf %lf %s %s %s %lf %ld %lf %ld\n",symbol,trade_no,utc_sec,utc_nano,date,time,trade_type,ltp,ltq,vwap,volume);


//          char li[100] = "Only Trades.txt";
//          wr(li);
        }

ここで、その数値を double utc_nano として取得します。問題は、これを別の関数を介して別のファイルに書き込むと、得られる出力は次のとおりです。

USDINR12AUGFUT 58 1.344e+009627906 2012-08-08 09:00:05 TRADE 55.1600 2 55179.50 839 USDINR12AUGFUT 59 1.344e+009627910 2012-08-08 09:00:05 TRADE 55.1600

強調表示された数値を指数形式で表示したくありません。入力ファイルにあるように表示したいのですが、助けてください

4

2 に答える 2

3

これらのフィールドのかなりの数に float を使用したくないと思います。取引数、Utc sec (秒)、utc nano (おそらくナノ秒) の丸め誤差を受け入れる準備ができていない限り

その場合、これらのフィールドのタイプを一致するように変更し、別の scanf 文字列を使用して (おそらく long または long long) 整数を読み取っていることを示す必要があります。

また、これらすべてにグローバル変数を使用しているようですが、これは良い考えではありません。

于 2013-01-04T10:27:49.323 に答える
2

明らかに、異常な printf 実装があります。このように動作するはずですが、そうではないようです。

%ffloat または double 型の場合は正しいはずです。%gまたはで指数のみを取得する必要があります%e。ちなみに、%lfと同じはず%fです。

精度修飾子を追加してみることができます:

printf("%100.20f", utc_sec);

この例では、最小フィールド幅は 100 文字、最大精度は 20 桁である必要があります。もちろん、これらの数字は完全にばかげていますが、うまくいくトリックを見つけることができるかもしれません.

ただし、1 秒未満の精度がない場合は、浮動小数点型は必要ありません。整数はより広い範囲を提供し、計算を行う予定がなければ、文字列はより良い範囲を提供します。

于 2013-01-04T10:45:36.653 に答える