用C语言格式化浮点数

用C语言格式化浮点数,c,printf,C,Printf,可能重复: #包括 #包括 #包括 内部主(空) { 文件*文件; 双n; file=fopen(“fp.source”、“r”); 而(!feof(文件)){ fscanf(文件“%lf”、&n); printf(“下一个双精度:\%lf\”\n,n); } fclose(文件); 返回0; } 嗨,我正在尝试扫描浮点数,我已经让它工作了,但我得到了我不想要的尾随零。有没有办法避免这种情况?例如,我得到的当前输出是: 下一双:“11540000” 实际上,我希望: 下一双:“11.54”

可能重复:

#包括
#包括
#包括
内部主(空)
{
文件*文件;
双n;
file=fopen(“fp.source”、“r”);
而(!feof(文件)){
fscanf(文件“%lf”、&n);
printf(“下一个双精度:\%lf\”\n,n);
}
fclose(文件);
返回0;
}
嗨,我正在尝试扫描浮点数,我已经让它工作了,但我得到了我不想要的尾随零。有没有办法避免这种情况?例如,我得到的当前输出是: 下一双:“11540000”

实际上,我希望: 下一双:“11.54”

有没有办法避免这种情况

是的,只需正确格式化输出:

printf("Next double:\"%.0lf\"\n", n);

printf格式字符串中的
.0
表示您不希望打印小数点后的任何数字。如果需要小数点后的一位、两位、三位或更多位数,可以将
0
更改为其他值。

这不是扫描的问题。这是我的问题

从文件(我的重点):

f,f

双参数应转换为十进制表示法,格式为
“[-]ddd.ddd”
,其中基数字符后的位数等于精度规格如果精度缺失,则应取6;如果精度显式为零且不存在
“#”
标志,则不应出现基数字符。如果出现基数字符,则其前面至少会出现一个数字。低阶数字应以实施定义的方式四舍五入

您可能需要
%g
(再次强调我的):

g,g

双参数应转换为f或e样式(或在G转换说明符的情况下转换为f或e样式),精度指定有效位数。如果显式精度为零,则应取1。使用的样式取决于转换的值;只有当这种转换产生的指数小于-4或大于或等于精度时,才应使用样式e(或e)应从结果的小数部分删除尾随零;基数字符应仅在后跟数字或存在“#”标志时出现

试试这个

printf("Next double:\"%l.0f\"\n", n); 
这里有一个很好的字符串格式说明符参考


这不是扫描的问题。这是一个问题。我尝试使用%F打印,但仍然得到了尾随的零。为什么不使用
ciel()
floor()
函数呢?因为我需要整数部分后面的.54或.342,我不需要尾随的零。您使用的
feof
不正确:如果我使用printf(“下一个双精度:\“.0lf\”\n”,n); 它去掉了需要显示的数字,例如,我有12.54,它显示了12,我需要的是.54,但不是后面的5个零。@sixlettervariables指出的g/g说明符看起来可以做到这一点。
printf("Next double:\"%l.0f\"\n", n);