1

我有一个文件,其中包含这样的数据

USDINR12AUGFUT 58 1344396605 627906 2012-08-08 09:00:05 贸易 55.1600 2 55179.50 839 USDINR12AUGFUT 59 1344396605 627910 2012-08-08 09:00:05 贸易 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);
        }

我把这个数字作为双utc_nano ..问题是当我通过另一个函数将它写入另一个文件时,我得到的输出是

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

我不想要以指数形式突出显示的数字,我想要它在输入文件中的样子..请帮助我

4

2 回答 2

3

我认为您不想在其中很多字段中使用 float 。除非您准备好接受交易编号中的四舍五入错误,Utc sec(秒),utc nano(大概是纳秒)

在这种情况下,您需要更改这些字段的类型以匹配并使用不同的 scanf 字符串来指示您正在读取(可能是 long 或 long long)整数。

此外,您似乎对所有这些都使用全局变量,这不是一个好主意。

于 2013-01-04T10:27:49.323 回答
2

显然你有一个不寻常的 printf 实现。它应该像这样工作,但显然不是。

%f对于 float 或 double 类型应该是正确的。%g您应该只获得带有or的指数%e。顺便说一句,%lf应该和%f.

您可以尝试添加精度修饰符:

printf("%100.20f", utc_sec);

该示例应提供 100 个字符的最小字段宽度和 20 位的最大精度。当然,这些数字完全是疯狂的,但也许你会找到一个有效的技巧。

但是,如果您没有亚秒级的精度,则确实不需要浮点类型;整数将提供更大的范围,并且,如果您不打算对其进行数学运算,则字符串仍将提供更好的范围。

于 2013-01-04T10:45:36.653 回答