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