C 语言中,printf 函数用来输出数据时,不同类型的数据需要使用不同的格式说明符。对于浮点数类型(包括 float 和 double),需要使用特定的格式说明符。double 类型常常被错误地使用 "%f" 来打印。

1、格式说明符

printf 中,使用 "%f" 来打印 double 类型的变量是正确的,但 "%f" 用于 double 类型。float 类型的参数在传递给 printf 时会自动转换为 double(这个过程称为“提升”),因此打印 floatdouble 时使用的格式说明符是一样的,即 "%f"。对于 double,不需要特别指定 "%lf"。尽管在 scanf 中,"%lf" 用于 double 类型,但在 printf 中,"%f" 已经适用于 double 类型。可以在格式字符串中指定输出的精度。

#include <stdio.h>

int main() {
    double num = 123.456789;

    // 使用 %f 格式说明符打印 double 类型
    printf("The number is: %f\n", num);  // 默认精度输出
    printf("The number is: %.2f\n", num);  // 保留两位小数
    printf("The number is: %.5f\n", num);  // 保留五位小数

    return 0;
}

2、使用%lf输出double类型

printf中,%f%lf的行为是一样的。

#include <stdio.h>

int main() {
    double value = 3.1415926535;
    printf("%lf\n", value);  // 输出:3.141593
    return 0;
}

3、自动选择合适的格式

使用%g输出,适用于自动选择合适的格式,如科学计数法或普通浮点数。

#include <stdio.h>

int main() {
    double value = 3.1415926535;
    printf("%g\n", value);  // 输出:3.14159
    return 0;
}

4、常用格式说明符

C语言中,printfscanf函数使用格式说明符来格式化输入和输出。

格式说明符

说明

%d

输出int类型的有符号十进制整数。

%u

输出unsigned int类型的无符号十进制整数。

%o

输出 int 类型的无符号八进制整数。

%x

输出 int 类型的无符号十六进制整数

(小写字母a-f)。

%X

输出 int 类型的无符号十六进制整数

(大写字母A-F)。

%f

输出floatdouble 类型的十进制浮点数。

%lf

输出double类型的浮点数(与%f效果一样)。

%e

输出 floatdouble类型的科学计数法

(小写字母e表示指数)。

%E

输出 float 或 double 类型的科学计数法

(大写字母E表示指数)。

%g

自动选择合适的格式输出 floatdouble 类型,

根据值的大小决定使用普通浮点数或科学计数法。