C++ 中不使用 iomanip 实现小数点对齐

在 C++ 编程中,我们经常需要格式化输出数值,例如保留特定位数的小数并进行小数点对齐。虽然 iomanip 库提供了便捷的工具,但有时我们可能希望避免使用它,而是通过手动处理字符串来实现相同的效果。

以下是不使用 iomanip 库,实现保留 3 位小数和上下行小数点对齐的 C++ 代码示例:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

// 将浮点数转换为字符串,保留指定位数的小数
string formatNumber(double number, int decimalPlaces) {
    ostringstream oss;
    oss.precision(decimalPlaces);
    oss << fixed << number;
    return oss.str();
}

int main() {
    const int MAX_VALUES = 5;  // 可修改为需要输入的数值数量
    double values[MAX_VALUES];

    // 输入数值
    cout << '请输入 ' << MAX_VALUES << ' 个数值:' << endl;
    for (int i = 0; i < MAX_VALUES; i++) {
        cin >> values[i];
    }

    // 找到最大的小数位数
    int maxDecimalPlaces = 0;
    for (int i = 0; i < MAX_VALUES; i++) {
        double integerPart;
        double decimalPart = modf(values[i], &integerPart);
        int decimalPlaces = 0;
        while (decimalPart > 0.001) {
            decimalPart *= 10;
            decimalPart = modf(decimalPart, &integerPart);
            decimalPlaces++;
        }
        if (decimalPlaces > maxDecimalPlaces) {
            maxDecimalPlaces = decimalPlaces;
        }
    }

    // 输出数值并进行上下行小数点对齐
    cout << '输出结果:' << endl;
    for (int i = 0; i < MAX_VALUES; i++) {
        // 将数值转换为字符串,并保留3位小数
        string formattedNumber = formatNumber(values[i], 3);

        // 计算当前数值的小数位数
        double integerPart;
        double decimalPart = modf(values[i], &integerPart);
        int decimalPlaces = 0;
        while (decimalPart > 0.001) {
            decimalPart *= 10;
            decimalPart = modf(decimalPart, &integerPart);
            decimalPlaces++;
        }

        // 根据最大小数位数进行对齐
        string padding(maxDecimalPlaces - decimalPlaces, ' ');
        cout << padding << formattedNumber << endl;
    }

    return 0;
}

代码说明:

  1. formatNumber 函数:

    • 接收一个浮点数和要保留的小数位数作为参数。
    • 使用 ostringstream 将浮点数转换为字符串,并使用 precisionfixed 控制小数位数。
    • 返回格式化后的字符串。
  2. 主函数:

    • 接收用户输入的多个浮点数。
    • 找到所有输入值中最大的小数位数,用于后续对齐。
    • 遍历每个输入值,使用 formatNumber 函数将其格式化为保留 3 位小数的字符串。
    • 根据最大小数位数,计算需要填充的空格数,并使用字符串填充实现小数点对齐。
    • 最后,输出格式化后的数值。

这段代码展示了如何使用字符串处理技巧来实现 C++ 中的小数点对齐,避免了对 iomanip 库的依赖。通过自定义格式化函数和字符串填充,我们可以灵活地控制数值的输出格式,满足不同的需求。

C++ 不使用 iomanip 实现小数点对齐:3 位小数输出及代码示例

原文地址: https://www.cveoy.top/t/topic/kjQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录