首页 > C语言笔记

C语言printf()输出时保留指定的小数位数

在C语言编程中,格式化输出是一项常见而重要的任务。printf() 函数作为C语言中最常用的输出函数之一,为我们提供了强大的格式控制能力。
 

printf() 函数使用格式说明符来控制输出的格式,对于浮点数,我们主要使用%f格式说明符。要指定小数位数,我们可以在%f之间添加一个点号.和一个数字,其基本语法如下:

%.nf

其中 n 表示要保留的小数位数。


让我们通过一个简单的例子来演示如何使用这个语法:

#include <stdio.h>

int main() {
    double pi = 3.141592653589793;
    
    printf("默认输出:%f\n", pi);
    printf("保留 2 位小数:%.2f\n", pi);
    printf("保留 4 位小数:%.4f\n", pi);
    printf("保留 6 位小数:%.6f\n", pi);
    
    return 0;
}

这段代码的输出结果如下:

默认输出:3.141593
保留 2 位小数:3.14
保留 4 位小数:3.1416
保留 6 位小数:3.141593

从输出结果我们可以看到,默认情况下 printf() 会输出 6 位小数。通过使用 %.nf 格式,我们可以精确控制输出的小数位数。

四舍五入

值得注意的是,printf() 在输出指定小数位数时会进行四舍五入,这在某些情况下可能会导致一些意想不到的结果,例如:

#include <stdio.h>

int main() {
    double num = 3.14159265358979323846;
    
    printf("%.1f\n", num);  // 输出:3.1
    printf("%.1f\n", 3.15); // 输出:3.2
    
    return 0;
}

在这个例子中,3.14159... 四舍五入到一位小数是 3.1,而 3.15 四舍五入到一位小数是 3.2。

控制输出宽度

除了控制小数位数,我们还可以控制输出的总宽度,这在创建表格式输出时特别有用。语法如下:

%m.nf

其中 m 表示总宽度(包括小数点和小数部分),n 表示小数位数,如果实际数字的宽度小于指定的宽度,输出会在左侧填充空格。例如:

#include <stdio.h>

int main() {
    double num = 3.14159;
    
    printf("|%10.2f|\n", num);
    printf("|%-10.2f|\n", num);
    
    return 0;
}

输出结果:

|      3.14|
|3.14      |

在第二个 printf() 语句中,我们使用了 %-10.2f,其中的负号表示左对齐。

处理大数和小数

当处理非常大或非常小的数时,使用 %e 或 %g 格式说明符可能会更合适:%e 使用科学计数法,而 %g 会根据数值自动选择 %f 或 %e 格式。例如:

#include <stdio.h>

int main() {
    double large_num = 123456789.123456789;
    double small_num = 0.000000123456789;
    
    printf("大数 (f 格式): %.2f\n", large_num);
    printf("大数 (e 格式): %.2e\n", large_num);
    printf("大数 (g 格式): %.6g\n", large_num);
    
    printf("小数 (f 格式): %.9f\n", small_num);
    printf("小数 (e 格式): %.2e\n", small_num);
    printf("小数 (g 格式): %.6g\n", small_num);
    
    return 0;
}

输出结果:

大数 (f 格式): 123456789.12
大数 (e 格式): 1.23e+08
大数 (g 格式): 1.23457e+08
小数 (f 格式): 0.000000123
小数 (e 格式): 1.23e-07
小数 (g 格式): 1.23457e-07

通过这些例子,我们可以看到C语言 printf() 函数在处理浮点数输出时的强大功能。

相关文章