可能重复:
避免在printf()中尾随零
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
FILE *file;
double n;
file = fopen("fp.source", "r");
while(!feof(file)) {
fscanf(file, "%lf", &n);
printf("Next double:\"%lf\"\n", n);
}
fclose(file);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
嗨,我正在尝试扫描浮点数,我已经让它工作,但我得到了我不想要的尾随零.有办法避免这种情况吗?例如,我得到的当前输出是:下一个双倍:"11.540000"
实际上我想:下一个双:"11.54"
这不是扫描问题.这是printf格式化的问题.
从文档(强调我的):
f,F
double参数应转换为样式中的十进制表示法
"[-]ddd.ddd",其中基数字符后面的位数等于精度规范.如果缺少精度,则应视为6 ; 如果精度明确为零且没有'#'标志,则不会出现基数字符.如果出现基数字符,则在其前面至少出现一个数字.低位数字应以实现定义的方式舍入.
你可能想要%g(再次强调我的):
g,G
double参数应在f或e样式(或在A G转换指定的情况下,式F或E)被转换,其精度指定的显著位数.如果显式精度为零,则应将其视为1.使用的样式取决于转换的值; 只有当这种转换产生的指数小于-4或大于或等于精度时,才应使用样式e(或E).尾随零应从结果的小数部分中删除 ; 基数字符只有在后跟数字或存在"#"标志时才会出现.