用 C 的科学计数法打印数字

Jinku Hu 2023年1月30日 2021年3月21日
  1. 使用%E 格式说明符以科学计数形式打印数字
  2. 使用%e 格式说明符以科学计数法打印数字
用 C 的科学计数法打印数字

本文将演示有关如何在 C 语言中以科学计数法打印数字的多种方法。

使用%E 格式说明符以科学计数形式打印数字

科学数字表示法已广泛用于以简明的通用形式表示巨大和较小的值。即,每个数字在小数点前以 10 的幂表示。即使该符号在数学上与整数以及实数都兼容,但 printf 指示符%E 仍适用于浮点类型。请注意,字母 E 和相应符号后是指数表示。如果指数值为零,则显示的格式为 00

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    float n1 = 15000000;
    float n2 = -15000000;
    double n3 = 25.2132;
    double n4 = 0.00001302;

    printf("n1 (%%f) - %f: \n", n1);
    printf("n1 (%%E) - %E: \n", n1);

    printf("n2 (%%f) - %f: \n", n2);
    printf("n2 (%%E) - %E: \n", n2);

    printf("n3 (%%f) - %f: \n", n3);
    printf("n3 (%%E) - %E: \n", n3);

    printf("n4 (%%f) - %f: \n", n4);
    printf("n4 (%%E) - %E: \n", n4);

    exit(EXIT_SUCCESS);
}

输出:

n1 (%f) - 15000000.000000:
n1 (%E) - 1.500000E+07:
n2 (%f) - -15000000.000000:
n2 (%E) - -1.500000E+07:
n3 (%f) - 25.213200:
n3 (%E) - 2.521320E+01:
n4 (%f) - 0.000013:
n4 (%E) - 1.302000E-05:

使用%e 格式说明符以科学计数法打印数字

或者,%e 格式说明符具有与上一个示例相同的功能,除了所显示的字母以-[-]d.ddde±dd 的形式小写。现在,%e%E 格式说明符都可以在其右侧包含一个小数点和一个整数,以指示要显示的位数。如果用户不提供精度整数,它将自动设置为 6 位。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    float n1 = 15000000;
    float n2 = -15000000;
    double n3 = 25.2132;
    double n4 = 0.00001302;

    printf("n1 (%%f) - %f: \n", n1);
    printf("n1 (%%.2e) - %.2e: \n", n1);

    printf("n2 (%%f) - %f: \n", n2);
    printf("n2 (%%.1e) - %.1e: \n", n2);

    printf("n3 (%%f) - %f: \n", n3);
    printf("n3 (%%.2e) - %.2e: \n", n3);

    printf("n4 (%%f) - %f: \n", n4);
    printf("n4 (%%.1e) - %.1e: \n", n4);

    exit(EXIT_SUCCESS);
}

输出:

n1 (%f) - 15000000.000000:
n1 (%.2e) - 1.50e+07:
n2 (%f) - -15000000.000000:
n2 (%.1e) - -1.5e+07:
n3 (%f) - 25.213200:
n3 (%.2e) - 2.52e+01:
n4 (%f) - 0.000013:
n4 (%.1e) - 1.3e-05:
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn