gpt4 book ai didi

使用 setw(x) 而不是 put_money 对齐小数点的 C++ cout 列表

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:12 24 4
gpt4 key购买 nike

C++ 代码运行良好,但当前向右输出值但向左对齐且未在小数点上对齐。不能使用 put_money,我错过了什么?

尝试使用 fprint 和 put_money,与同学确认我们应该使用 setw(x)。

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


int main()
{
const double taxRate = 0.09;
const double laborCPH = 35.0; //where CPH is Cost Per Hour
double costParts;
double costLabor;
double totalTax;
double totalDue;
string name;
double laborHours;

cout << "What is your name? ";
cin >> name;

cout << "How many hours of labor needed? ";
cin >> laborHours;

costLabor = laborHours * laborCPH;

cout << "What was the cost of the parts and supplies? ";
cin >> costParts;
cout << endl << endl;


totalTax = costParts * taxRate;

totalDue = costParts + totalTax + costLabor;

cout.precision(2);
cout << setw(25) << left << "Customer Name " << fixed << right << internal << name << endl;
cout << setw(25) << left << "Hours of Labor " << fixed << right << internal << laborHours << endl;
cout << setw(25) << left << "Cost for Labor " << fixed << right << internal << costLabor << endl;
cout << setw(25) << left << "Parts and Supplies " << fixed << right << internal << costParts << endl;
cout << setw(25) << left << "Tax " << fixed << right << internal << totalTax << endl;
cout << setw(25) << left << "Total Amount Due " << fixed << right << internal << totalDue << endl;

return 0;
}

实际输出:

What is your name? Jones
How many hours of labor needed? 4.5
What was the cost of the parts and supplies? 97


Customer Name Jones
Hours of Labor 4.50
Cost for Labor 157.50
Parts and Supplies 97.00
Tax 8.73
Total Amount Due 263.23

期望的输出:

What is your name? Jones
How many hours of labor needed? 4.5
What was the cost of the parts and supplies? 97


Customer Name Jones
Hours of Labor 4.50
Cost for Labor 157.50
Parts and Supplies 97.00
Tax 8.73
Total Amount Due 263.23

最佳答案

当您在打印前使用 std::internal 填充剩余空间时,它将打印所有 剩余空间到终端。如果仔细查看输出,您会发现在数字开头之前有 25 个字符(如果是第一行,则为您的姓名。)

您可以通过计算要打印的字符串的长度并从 setw() 调用中减去该长度来解决这个问题,但是对于固定精度的 float 和 double 来说,这会变得很复杂。幸运的是,有一种更简单的方法!

正如 Fred Larson 在评论中指出的那样,解决此问题的一个好方法是在第一次调用后添加第二个 setw()std::internalstd::internal 像这样:

     cout.precision(2);
cout << setw(20) << left << "Customer Name " << fixed << right << internal << setw(7) << internal << name << endl;
cout << setw(20) << left << "Hours of Labor " << fixed << right << internal << setw(7) << internal << laborHours << endl;
cout << setw(20) << left << "Cost for Labor " << fixed << right << internal << setw(7) << internal << costLabor << endl;
cout << setw(20) << left << "Parts and Supplies " << fixed << right << internal << setw(7) << internal << costParts << endl;
cout << setw(20) << left << "Tax " << fixed << right << internal << setw(7) << internal << totalTax << endl;
cout << setw(20) << left << "Total Amount Due " << fixed << right << internal << setw(7) << internal << totalDue << endl;

这允许终端用空格填充输出,然后用额外的空格缓冲您的数字或字符串,最后打印所有对齐的数字。只要确保为您的第二个 setw() 提供足够的空间来容纳大量数字,如果您期望它们的话。

Try it here!

关于使用 setw(x) 而不是 put_money 对齐小数点的 C++ cout 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57828082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com