如何在C++中使用SEtW商店和StValk显示一个带值的$标志
我想在第二列中显示其值旁边的美元符号,但如果我将该值转换为字符串,setprecision将不起作用,它显示的小数比我希望的更多。目前格式不太好 我当前的代码:如何在C++中使用SEtW商店和StValk显示一个带值的$标志,c++,string,setw,C++,String,Setw,我想在第二列中显示其值旁边的美元符号,但如果我将该值转换为字符串,setprecision将不起作用,它显示的小数比我希望的更多。目前格式不太好 我当前的代码: string unit = "m"; double width = 30.123; double length = 40.123; double perimeter = 2 * width + 2 * length; double area = width * length; double rate = (area <= 3000
string unit = "m";
double width = 30.123;
double length = 40.123;
double perimeter = 2 * width + 2 * length;
double area = width * length;
double rate = (area <= 3000) ? 0.03 : 0.02;
double cost = area * rate;
const int COLFMT = 20;
cout << fixed << setprecision(2);
cout << setw(COLFMT) << left << "Length:"
<< setw(COLFMT) << right << length << " " << unit << endl;
cout << setw(COLFMT) << left << "Width:"
<< setw(COLFMT) << right << width << " " << unit << endl;
cout << setw(COLFMT) << left << "Area:"
<< setw(COLFMT) << right << area << " square" << unit << endl;
cout << setw(COLFMT) << left << "Perimeter:"
<< setw(COLFMT) << right << perimeter << " " << unit << endl;
cout << setw(COLFMT) << left << "Rate:"
<< setw(COLFMT) << right << rate << "/sqaure" << unit << endl;
cout << setw(COLFMT) << left << "Cost:"
<< setw(COLFMT) << right << "$" << cost << endl;
目前格式不太好
这是因为std::right与它后面的内容相关,在您的例子中是$。所以美元符号是右对齐的,而不是后面的值
您想要的是完全格式化的货币值$36.26右对齐。因此,首先使用stringstream将其构建为字符串
我想说的是,我曾尝试使用floor to round,但当转换为string时,它显示36.260000。我尝试了其他一些方法,但不幸的是,我似乎不知道如何显示36.26美元,宽度和长度分别为30.123和40.123。上面显示的程序在运行时已经打印了36.26美元。问题出在哪里?问题出在格式错误的输出上,36.26美元没有与上面的其他数字对齐。
Length: 40.12 m
Width: 30.12 m
Area: 1208.63 square m
Perimeter: 140.49 m
Rate: 0.03/square m
Cost: $36.26
stringstream ss;
ss << fixed << setprecision(2) << "$" << cost;
cout << left << "Cost:" << setw(COLFMT) << right << ss.str() << endl;