在C中格式化浮点数

DLR*_*DLR -2 c printf

可能重复:
避免在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"

use*_*116 5

这不是扫描问题.这是printf格式化的问题.

从文档(强调我的):

f,F

double参数应转换为样式中的十进制表示法"[-]ddd.ddd",其中基数字符后面的位数等于精度规范.如果缺少精度,则应视为6 ; 如果精度明确为零且没有'#'标志,则不会出现基数字符.如果出现基数字符,则在其前面至少出现一个数字.低位数字应以实现定义的方式舍入.

你可能想要%g(再次强调我的):

g,G

double参数应在f或e样式(或在A G转换指定的情况下,式F或E)被转换,其精度指定的显著位数.如果显式精度为零,则应将其视为1.使用的样式取决于转换的值; 只有当这种转换产生的指数小于-4或大于或等于精度时,才应使用样式e(或E).尾随零应从结果的小数部分中删除 ; 基数字符只有在后跟数字或存在"#"标志时才会出现.