我的代码是这样的:
#include <iostream>
int main()
{
using namespace std;
const float dollar = 1.00;
cout << "You have " << dollar*10.00 << " dollars." << endl;
cin.get();
cin.get();
return 0;
}
我是C++的初学者。我输入了这段代码只是玩玩,假设控制台会显示“你有10. 00美元,但它实际上显示我有“10”而不是“10. 00”美元。这是为什么呢?
4条答案
按热度按时间bf1o4zei1#
由于您正在处理美元金额,因此可以在写入
cout
之前设置以下内容:Live code example at coliru
t1qtbnec2#
标准库已经有了一些处理货币值的代码。在C98/03中,使用起来很痛苦,可能不值得麻烦,但在C11中,添加了几个I/O操纵器,使它们非常容易使用。
在默认的“C”语言环境中,它们可能不会有太大的用处,但在国家化的语言环境中,它们将按照您通常期望的语言环境来格式化货币。例如:
这使用了
""
区域设置,它根据操作系统的配置方式选择区域设置。例如,在我的情况下,操作系统设置为美国英语,因此选择美国英语区域设置。根据语言环境,这将显示货币,因为(程序员猜测)货币通常会在该语言环境中显示。例如,如果我输入“10”(小数点后有或没有一些0),它会将值打印为
10.00
。如果愿意,我可以指定一个区域设置--例如,我可以指定“de”来获得德语区域设置。在这种情况下,该值将(至少使用我手边的编译器)使用德国惯例(
.
作为千位分隔符,,
作为小数点分隔符)打印出来。还要注意,我可以将std::cin
的区域设置与std::cout
的区域设置分开指定,因此我可以(例如)将cin
设置为美国英语,将cout
设置为德语。如果我这样做,我可以输入1,234,567.89
作为输入,并接收1.234.567,89
作为输出。(注意,虽然它将格式从美国转换为德国惯例,但它不会在输出时自动将我的美元输入转换为欧元)。请注意,
put_money
也会在完成任务后自动恢复以前的格式。例如,如果我将上面的最后一行更改为:std::cout << std::put_money(amt) << "\n";
,然后输入10
作为输入,我得到10.00 10
。还要注意(至少在VC++中)
std::get_money
实际上将值存储为美分的整数计数,这将防止大多数舍入错误。因此,如果输入10
,实际存储的是1000
,然后重新缩放以在输出处显示为10.00
。如果您使用的是不包含
std::get_money
和std::put_money
的旧编译器,那么最简单的方法可能是从标准中复制它们的定义,将它们放入您自己的头文件中,然后使用它们。如果你不想这样做,我会考虑定义一个money
类来存储一笔钱,并重载operator>>
和(特别是)operator<<
来处理你认为合适的格式,所以写出一个货币值就像这样:......
operator<<
将处理所有的std::setprecision
等,以显示小数点后两位等。zpjtge223#
如果不格式化输出,cout将删除不必要的零。您可以设置输出的精度。
des4xlb04#
//cout << setprecision(3)<<固定;
还有一点:不要将
using namespace std;
放在 main 语句中,添加标题
#include <iomanip>
代码