我有一个包含这样数据的文件
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,<p,<q,&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
我不希望突出显示的数字呈指数形式,我想要它,因为它在输入文件中..请帮助我
答案 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位。当然,这些数字完全是疯狂的,但也许你会发现一个有效的技巧。
如果你没有亚秒精度,那么实际上不需要浮点类型;整数会给出更大的范围,如果你不打算对它进行数学计算,一个字符串仍会提供更好的范围。