C++ 如何正确使用setprecision()来添加";。00“;到最后一笔钱?

C++ 如何正确使用setprecision()来添加";。00“;到最后一笔钱?,c++,cout,iomanip,C++,Cout,Iomanip,我显然不知道如何设定精度。这个代码应该打印出通过收费站的汽车的价格 void TollBooth::arrive(Car c) { carcount += 1; int cost; int doors = c.getDoors(); cost = 3 + doors; total+=cost; cout << setw(12) << left << "Car: "<< setw(8) <<c.getID()<

我显然不知道如何设定精度。这个代码应该打印出通过收费站的汽车的价格

void TollBooth::arrive(Car c)
{
  carcount += 1;
  int cost;
  int doors = c.getDoors();
  cost = 3 + doors;
  total+=cost;
  cout << setw(12) << left << "Car: "<< setw(8) <<c.getID()<< setw(8) 
    << "  Amount Due: $ " << setw(5) << fixed << right << setprecision(2) << cost << endl;
}
void收费站::到达(c车)
{
carcount+=1;
国际成本;
int doors=c.getDoors();
成本=3+门;
总+=成本;

cout对于您的特定情况,它不会添加尾随零,因为
成本
在代码中声明为
整数
。您需要将其强制转换为
双精度
浮点
(尽管它可能会导致某些整数值的数据丢失)


cout对于您的特定情况,它不会添加尾随零,因为
成本
在您的代码中声明为
整数
。您需要将其强制转换为
双精度
浮点
(尽管它可能会导致某些整数值的数据丢失)


cout不要使用
setprecision
,只需直接回显尾随的
.00
(并调整前面的
setw
):

void收费站::到达(c车)
{
carcount+=1;
int doors=c.getDoors();
内部成本=3+门;
总+=成本;

不能不要使用
setprecision
,只需直接回显尾随的
.00
(并调整前面的
setw
):

void收费站::到达(c车)
{
carcount+=1;
int doors=c.getDoors();
内部成本=3+门;
总+=成本;

cout正如其他人所写,原因是你使用整数而不是双倍,但无论如何。你是否可以使用双倍来表示货币是一个有待讨论的问题。我不会这么做,但对于大多数非金融软件(如游戏、学校项目、跟踪你的月收入和支出)来说,这已经足够了


然而,回到您的实际问题:如果您想格式化货币值,您可能无论如何都想使用浮点格式,而不是普通的浮点格式。

正如其他人所写,原因是您使用的是整数而不是双精度,但无论如何。您是否可以使用双精度来表示货币是有争议的。我不会这样做t、 但对于大多数非金融软件(如游戏、学校项目、跟踪每月收入和支出)来说,这已经足够了


然而,回到您的实际问题:如果您想格式化货币值,您可能无论如何都想使用普通浮点格式。

您可以使用
setprecision
showpoint

double a = 14;
cout << setprecision(4) << showpoint << a;

缺点是您必须计算setprecision参数。

您可以使用
setprecision
showpoint

double a = 14;
cout << setprecision(4) << showpoint << a;

缺点是您必须计算setprecision参数。

相关:如果不是重复,则更相关:设置要显示的所有数字的数量,而不仅仅是小数点后的数字。@πάνταῥεῖ 我认为它允许您在使用固定ios操纵器时指定小数点后的位数。@bkVnet是的,您是对的。相关:如果不是重复,则更相关:设置要显示的所有位数,而不仅仅是小数点后显示的位数。@πάνταῥεῖ 我认为它允许您在使用固定ios操纵器时指定小数点后的位数。@bkVnet是的,您是对的。@bkVnet_uuu“即使我不认为将价格(货币值)设为整数有什么意义。”好吧,检查我第一条评论中的链接。@πάνταῥεῖ 非常重视点。谢谢。@bkVnet:即使你想把钱看作非整数,使用浮点值存储钱肯定会带来灾难。固定点是一个更好的主意,它用整数来表示(也就是说,用美分来表示)@bkVnet:如果您必须使用浮点运算,我强烈建议您在这里使用
double
而不是
float
。IEEE 32位
float
的精度非常有限,即使是在
int
范围内的25位整数转换,您也会开始丢失数据(在Python的一个快速测试中,
ctypes.c_float(16777217).value
得到你的
16777216.0
)@ShadowRanger你是对的。我会更新答案的。@bkVnet_uuuu“即使我不认为将价格(货币值)设为整数的意义。”好吧,检查我第一条评论中的链接。@πάνταῥεῖ 非常重视点。谢谢。@bkVnet:即使你想把钱看作非整数,使用浮点值存储钱肯定会带来灾难。固定点是一个更好的主意,它用整数来表示(也就是说,用美分来表示)@bkVnet:如果您必须使用浮点运算,我强烈建议您在这里使用
double
而不是
float
。IEEE 32位
float
的精度非常有限,即使是在
int
范围内的25位整数转换,您也会开始丢失数据(在Python的一个快速测试中,
ctypes.c_float(16777217).value
获取您的
16777216.0
)。@ShadowRanger您是对的。我会更新答案。
double a = 14;
cout << setprecision(4) << showpoint << a;
14.00