如何为数字添加2个小数位?

时间:2015-02-05 01:55:39

标签: c++ decimal

这是我的代码。我教授给我们的信息只显示2个小数点是out.precision(2);.

cout << "Welcome to the Book Store" << endl << endl;

cout << "Enter the single copy price: $" ;
cin >> single_copy_price ;

cout << "Enter the number of books sold: " ;
cin >> num_of_books_sold ;

cout << "Enter the discount percentage: " ;
cin >> discount_percentage ;

cout << "********************************************" << endl ;

subtotal = single_copy_price * num_of_books_sold ;
cout.precision(2) ;
cout<< "Subtotal: $" << subtotal << endl ;

cout << "Discount percentage: " << discount_percentage << "%" << endl ;

discount_ammount = subtotal * (discount_percentage / 100) ;
cout.precision(2) ;
cout << "Discount ammount: $ " <<  discount_ammount << endl ;

cout.precision(2) ;
cout << "Final price: $" << subtotal - discount_ammount << endl ;

return 0;

`

然而,这是我的结果:

欢迎来到书店

输入单一副本价格:10.50美元 输入已售书数:20 输入折扣百分比:15


小计:$ 2.1e + 02 折扣百分比:15% 折扣大小:32美元 最终价格:$ 1.8e + 02 程序以退出代码结束:0

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题是cout.setprecision(2)。它的作用是限制显示的数字中的有效数字。它对科学工作很有用,但不是你想要的。

一个人的解决方案是编写自己的格式化方法:http://www.arachnoid.com/cpptutor/student3.html

最后是第6点,货币。他的解决方案还为数千个地方用$和逗号格式化。

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

void showCurrency(double dv, int width = 14)
{
    const string radix = ".";
    const string thousands = ",";
    const string unit = "$";
    unsigned long v = (unsigned long) ((dv * 100.0) + .5);
    string fmt,digit;
    int i = -2;
    do {
        if(i == 0) {
            fmt = radix + fmt;
        }
        if((i > 0) && (!(i % 3))) {
            fmt = thousands + fmt;
        }
        digit = (v % 10) + '0';
        fmt = digit + fmt;
        v /= 10;
        i++;
    }
    while((v) || (i < 1));
    cout << unit << setw(width) << fmt.c_str() << endl;
}

最简单的解决方案是将精度设置为比整数部分中的位数多2。要计算出来,请转换为int并计算除以10而非零结果的次数。