You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化C++贷款月供程序的输出表格格式?

调整C++贷款程序输出为表格布局方案

我懂你想要把输出改成规整的表格样式,之前尝试std::left和std::setw没达到预期对吧?没问题,我们来调整输出代码,让它完全匹配你想要的布局——重点解决对齐、格式统一和表格边框的问题,同时忽略计算逻辑的问题(你说过不关心这个)。

关键问题分析

你原来的代码有几个影响输出格式的小细节:

  1. 没有用std::fixed,导致std::setprecision控制的是有效数字而非小数位数,出现了科学计数法和奇怪的小数长度;
  2. 标签和内容的对齐规则没统一,货币部分的$和数值没有整体对齐;
  3. 缺少表格分隔线,看起来不像规整的表格。

修改后的完整代码

下面是调整了输出部分的代码,我保留了你的计算逻辑,只修改了输出相关的代码:

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

核心修改点说明

  1. std::fixed的使用:强制输出固定小数格式,让std::setprecision(n)表示保留n位小数,避免科学计数法和有效数字的混乱;
  2. 统一列宽与对齐:标签列左对齐固定25字符,内容列右对齐固定12字符,确保每一行的内容都整齐排列;
  3. 表格分隔线:用-----------------------------------------模拟表格边框,让布局更清晰;
  4. 百分比修正:把原来的rate乘以100,输出正确的百分比数值(比如0.00667变成0.667%);
  5. 货币对齐:把$和数值作为一个整体右对齐,保证货币列的整齐性。

额外提示(可选)

虽然你说不关心计算错误,但还是提一句:你的月供公式里少乘了贷款金额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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:47:14