我的代码是:
#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“美元。有人可以告诉我为什么会这样吗?
答案 0 :(得分:4)
由于您处理的是金额,您可以在写入cout
之前设置以下内容:
std::cout.precision(2);
std::cout.setf(std::ios::fixed);
#include <iostream>
int main() {
using namespace std;
const float dollar = 1.00;
std::cout.precision(2);
std::cout.setf(std::ios::fixed);
cout << "You have " << dollar*10.00 << " dollars." << endl;
cin.get();
cin.get();
return 0;
}
答案 1 :(得分:1)
如果不格式化输出,cout将削减不必要的零。您可以设置输出精度。
cout<<fixed<<setprecision(2)<<dollar<<endl;
答案 2 :(得分:1)
// cout&lt;&lt; setprecision(3)&lt;&lt;固定的;
还有一点不说 using namespace std;在主要陈述中,
添加标题#include //代码//
int main()
{
float dollar = 2.00f;
cout << setprecision(3) << fixed;
std::cout << dollar << " dollars." << endl;
cin.get();
cin.get();
return 0;
}
答案 3 :(得分:1)
标准库已经有一些代码来处理货币价值。在C ++ 98/03中,使用它可能不值得麻烦,但是在C ++ 11中,添加了几个I / O操纵器使它们变得非常容易使用。
在默认情况下&#34; C&#34;在本地化,它们可能不会有多大用处,但在国有化的语言环境中,它们会按照您通常对该语言环境的期望来格式化金钱。例如:
#include <iostream>
#include <iomanip>
int main(){
long double amt;
std::cin.imbue(std::locale(""));
std::cout.imbue(std::locale(""));
std::cin >> std::get_money(amt);
std::cout << std::put_money(amt) << "\n";
}
这使用""
语言环境,该语言环境根据操作系统的配置方式选择语言环境。例如,在我的情况下,操作系统设置为美国英语,因此选择美国英语语言环境。
根据区域设置,这会显示钱(程序员猜测)通常会在该区域设置中显示的钱。例如,如果我输入&#34; 10&#34; (在小数点后有或没有0),它会将值打印为10.00
。
如果我愿意,我可以指定一个区域设置 - 例如,我可以指定&#34; de&#34;获得德语区域设置。在这种情况下,将使用德语约定(.
作为千位分隔符和,
作为小数分隔符)打印出值(至少使用我编写的编译器)。另请注意,我可以将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<<
重载为根据您的需要处理格式,因此写出货币值将是:
money m(10);
std::cout << m;
...而operator<<
会处理所有std::setprecision
,以便显示小数点后两位等等。