如何优化C++贷款月供程序的输出表格格式?
调整C++贷款程序输出为表格布局方案
我懂你想要把输出改成规整的表格样式,之前尝试std::left和std::setw没达到预期对吧?没问题,我们来调整输出代码,让它完全匹配你想要的布局——重点解决对齐、格式统一和表格边框的问题,同时忽略计算逻辑的问题(你说过不关心这个)。
关键问题分析
你原来的代码有几个影响输出格式的小细节:
- 没有用
std::fixed,导致std::setprecision控制的是有效数字而非小数位数,出现了科学计数法和奇怪的小数长度; - 标签和内容的对齐规则没统一,货币部分的
$和数值没有整体对齐; - 缺少表格分隔线,看起来不像规整的表格。
修改后的完整代码
下面是调整了输出部分的代码,我保留了你的计算逻辑,只修改了输出相关的代码:
#include "string" #include "iostream" #include "cmath" #include "iomanip" std::string name, item_name; double loan_amount, annual_interest_rate; int number_of_years; double rate; int number_of_payments; double monthly_payments, total_amount_paid, total_interest_paid; int main() { std::cout << "Welcome to the Monthly Payment Program." << std::endl << std::endl; std::cout << "Enter your name: "; std::getline(std::cin, name); std::cout << "Item being financed: "; std::getline(std::cin, item_name); std::cout << "Enter the loan amount: "; std::cin >> loan_amount; std::cout << "Enter the annual interest rate (in percentage): "; std::cin >> annual_interest_rate; std::cout << "Enter the duration of the loan in years: "; std::cin >> number_of_years; // 你的计算逻辑(保留原样,即使有错误) rate = annual_interest_rate / (12 * 100); number_of_payments = number_of_years * 12; monthly_payments = (rate * std::pow((1 + rate), number_of_payments))/(std::pow((1 + rate), number_of_payments) - 1); total_amount_paid = number_of_payments * monthly_payments; total_interest_paid = total_amount_paid - loan_amount; std::cout << std::endl; // 开启固定小数格式,确保setprecision控制小数位数 std::cout << std::fixed; // 定义列宽:标签列25字符,内容列12字符(含货币符号) const int label_width = 25; const int value_width = 12; // 输出表格分隔线和内容 std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Name:" << std::right << std::setw(value_width) << name << std::endl; std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Item being financed:" << std::right << std::setw(value_width) << item_name << std::endl; std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Monthly Interest Rate:" << std::right << std::setw(value_width-1) << std::setprecision(3) << rate * 100 << "%" << std::endl; std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Number of Payments:" << std::right << std::setw(value_width) << number_of_payments << std::endl; std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Monthly Payment:" << std::right << "$" << std::setw(value_width-1) << std::setprecision(2) << monthly_payments << std::endl; std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Total Amount Paid:" << std::right << "$" << std::setw(value_width-1) << std::setprecision(2) << total_amount_paid << std::endl; std::cout << "-----------------------------------------" << std::endl; std::cout << std::left << std::setw(label_width) << "Interest Paid:" << std::right << "$" << std::setw(value_width-1) << std::setprecision(2) << total_interest_paid << std::endl; std::cout << "-----------------------------------------" << std::endl; return 0; }
核心修改点说明
std::fixed的使用:强制输出固定小数格式,让std::setprecision(n)表示保留n位小数,避免科学计数法和有效数字的混乱;- 统一列宽与对齐:标签列左对齐固定25字符,内容列右对齐固定12字符,确保每一行的内容都整齐排列;
- 表格分隔线:用
-----------------------------------------模拟表格边框,让布局更清晰; - 百分比修正:把原来的
rate乘以100,输出正确的百分比数值(比如0.00667变成0.667%); - 货币对齐:把
$和数值作为一个整体右对齐,保证货币列的整齐性。
额外提示(可选)
虽然你说不关心计算错误,但还是提一句:你的月供公式里少乘了贷款金额loan_amount,正确的公式应该是:
monthly_payments = loan_amount * (rate * std::pow((1 + rate), number_of_payments))/(std::pow((1 + rate), number_of_payments) - 1);
如果之后需要正确的计算结果,可以加上这个修正。
内容的提问来源于stack exchange,提问作者user4092851
相关产品推荐
相关产品推荐

