9

我正在尝试以格式化文本进行一些简单的输出。Setprecision 不会将我的变量打印到小数点后两位。

例如,如果 firstItemPrice = 2.20,则输出为 2.2 而不是 2.20

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{

    string firstitem = "";
    string seconditem = "";
    double firstItemNum;    
    double firstItemPrice = 0.00;
    double secondItemNum;
    double secondItemPrice = 0.00;

    //first item
    cout << "Enter the name of Item 1: ";
    getline(cin, firstitem);
    cout << "Enter the number of " << firstitem << "s and the price of each: ";
    cin >> firstItemNum >> firstItemPrice;
    cin.ignore();

    //second item
    cout << "Enter the name of Item 2: ";
    getline(cin, seconditem);
    cout << "Enter the number of " << seconditem << "s and the price of each: ";
    cin >> secondItemNum >> secondItemPrice;


    cout << left << setw(20) << "Item"  << setw(10) << "Count"
    << setw(10) << "Price" << left << "\n";

    cout << setw(20) << "====" << setw(10) << "====" << setw(10)
    << "====" << left << "\n";

    cout << setw(20) << firstitem << setw(10)
    << firstItemNum << setw(10) << setprecision(2)
    << firstItemPrice << "\n";

    cout << setw(20) << seconditem << setw(10) << secondItemNum
    << setprecision(2) << secondItemPrice << left << "\n";


    return 0;
}
4

2 回答 2

11

你需要一个fixed在那里才能做到这一点。

cout << fixed;

使用以下方法重新设置:

cout.unsetf(ios_base::floatfield);

在你的情况下,像这个例子一样改变你程序的最后一点应该做到这一点:

cout << setw(20) << firstitem << setw(10)
<< firstItemNum << setw(10) << fixed << setprecision(2)
<< firstItemPrice << "\n";

cout.unsetf(ios_base::floatfield);

cout << setw(20) << seconditem << setw(10) << secondItemNum
<< fixed << setprecision(2) << secondItemPrice << left << "\n";

编辑除外:不要使用浮点数来表示货币价值。

于 2013-05-17T22:45:17.623 回答
6

来自http://www.cplusplus.com/reference/ios/ios_base/precision/

浮点精度决定了在插入操作中写入以表示浮点值的最大位数。如何解释这取决于 floatfield 格式标志是设置为特定表示法(固定或科学)还是未设置(使用默认表示法,不一定等同于固定或科学)。

对于默认语言环境: 使用默认浮点表示法,精度字段指定要显示的有意义数字的最大数量,包括小数点之前和之后的数字。请注意,它不是最小值,因此如果数字可以显示的位数少于精度,则它不会用尾随零填充显示的数字。在固定计数法和科学计数法中,精度字段准确指定要在小数点后显示多少位,即使这包括尾随的十进制零。在这种情况下,小数点前的数字与精度无关。

于 2013-05-17T22:54:08.590 回答