C++ 使用 printf 实现保留3位小数和上下行小数点对齐
如果不使用'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'函数,我们可以格式化字符串并将其存储在缓冲区中。然后,我们使用字符串填充来实现上下行小数点对齐的效果。
原文地址: https://www.cveoy.top/t/topic/kkJ 著作权归作者所有。请勿转载和采集!