程序将十进制舍入到指数,我不想要

时间:2013-01-04 10:17:48

标签: c

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

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);
        }

我把那个数字当作双倍utc_nano ..问题是当我通过另一个函数在另一个文件中写这个时,我得到的输出是

USDINR12AUGFUT 58 1.344e+009 627906 2012-08-08 09:00:05 TRADE 55.1600 2 55179.50 839 USDINR12AUGFUT 59 1.344e+009 627910 2012-08-08 09:00:05 TRADE 55.1600

我不希望突出显示的数字呈指数形式,我想要它,因为它在输入文件中..请帮助我

2 个答案:

答案 0 :(得分:3)

我认为你不想在那些领域中使用float。除非你准备接受你的交易号码中的舍入错误,Utc秒(秒),utc nano(大概是纳秒)

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

此外,您似乎正在使用全局变量,这不是一个好主意。

答案 1 :(得分:2)

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

对于float或double类型,

%f应该是正确的。您应该只获得%g%e的指数。顺便说一下,%lf应与%f相同。

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

printf("%100.20f", utc_sec);

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

如果你没有亚秒精度,那么实际上不需要浮点类型;整数会给出更大的范围,如果你不打算对它进行数学计算,一个字符串仍会提供更好的范围。