如果不使用'sstream'库,可以使用'printf'函数来实现保留3位小数和上下行小数点对齐的功能。以下是一个示例代码:

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

// 将浮点数转换为字符串,保留指定位数的小数
string formatNumber(double number, int decimalPlaces) {
    char buffer[50];  // 根据实际情况调整缓冲区大小
    sprintf(buffer, "%.*f", decimalPlaces, number);
    return buffer;
}

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;
}

在这个示例代码中,我们定义了一个'formatNumber'函数,用于将浮点数转换为字符串并保留指定位数的小数。通过使用'sprintf'函数,我们可以格式化字符串并将其存储在缓冲区中。然后,我们使用字符串填充来实现上下行小数点对齐的效果。

C++ 使用 printf 实现保留3位小数和上下行小数点对齐

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

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