如何正确使用 setprecision() 将".00"添加到金额的末尾?
How do I properly use setprecision() to add ".00" to the end of an amount for money?
我显然不知道如何设置精度。这个代码应该打印出通过收费站的汽车的价格
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;
}
然而,打印出来的是没有尾随零的"成本"。
不要使用setprecision
,只需直接回显后面的.00
(并调整前面的setw
):
void TollBooth::arrive(Car c)
{
carcount += 1;
int doors = c.getDoors();
int cost = 3 + doors;
total += cost;
cout << setw(12) << left << "Car: "<< setw(8) <<c.getID()<< setw(8) << " Amount Due: $ "
<< setw(3) << right << cost << ".00" << endl;
}
您可以强制转换为浮点,对于int
值,在我所知的所有体系结构上使用double
应该是安全的。不过不要转换为float
;正如我在评论中指出的,IEEE 32位浮点不具有表示int
的整个范围的精度(例如,当转换为IEEE 32位float
时,(1 << 24) + 1
变得等于1 << 24
)。最好避免在不必要时出现精度错误的风险。
对于您的特殊情况,它不添加尾随零,因为cost
在您的代码中被声明为integer
。您需要将其强制转换为double
或float
(尽管这可能会导致某些整数值的数据丢失)。
cout << setw(12) << left << "Car: "<< setw(8) <<c.getID()<< setw(8) << " Amount Due: $ "
<< setw(5) << fixed << right << setprecision(2) << static_cast<double>cost << endl;
顺便说一句,你可能想阅读问题评论部分给出的链接。
正如其他人所写,原因是您使用的是int而不是double,但无论如何。是否可以用双精度来表示货币还有待商榷。我不会这么做,但对于大多数非金融软件(如游戏、学校项目、跟踪每月收入和支出)来说,这已经足够了。
然而,回到您的实际问题:如果您想格式化货币值,您可能希望使用std::put_money
而不是纯浮点格式。
您可以使用setprecision
和showpoint
:
double a = 14;
cout << setprecision(4) << showpoint << a;
输出:
14.00
不利的一面是,您必须计算setprecision参数。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 如何正确使用 setprecision() 将".00"添加到金额的末尾?