如何在C ++中正确设置双精度

时间:2016-01-27 18:51:22

标签: c++ visual-studio

我正在开展一个项目,我需要做一些数学运算并给用户输出美元,所以我想让我的控制台告诉用户一个像$20.15这样的答案,而不是$20.153。我使用了set precision函数: cout << setprecision(2);,但不是让数字成为我想要的数字,而是将它们转换成科学记数法。

我输出了很多数字,所以拥有像setprecision这样的功能对我来说最适合使用。

如何正确显示数字只显示两位小数而不是让控制台以科学计数法给出数字?

由于

编辑:

以下是我的代码中遇到问题的部分:

int main() {

cout << setprecision(2);

if (totalCostHybrid < totalCostNonHybrid) {
            cout << "Hybrid car: " << endl;
            cout << "Total cost: " << totalCostHybrid << endl;
            cout << "Total gallons used: " << milesPerYear / hybridEffic << endl;
            cout << "Total gas cost: " << gasCostHybrid << endl;
            cout << "Non-hybrid car: " << endl;
            cout << "Total cost: " << totalCostNonHybrid << endl;
            cout << "Total gallons used: " << milesPerYear / nonHybridEffic << endl;
            cout << "Total gas cost: " << gasCostNonHybrid << endl;
            cout << "Hybrid is cheaper!" << endl;
}

显然还有更多,但这是我需要帮助的。

3 个答案:

答案 0 :(得分:1)

Iostreams是格式化浮点值的痛苦。但为什么使用浮点表示货币值?你应该存储整数便士(或十分之一便士),因为虽然你不是在计算整数美元,但你的价值实际上是固定点。你真的不需要浮点带来的麻烦。然后你可以流式传输整个&#34;分数&#34;您的价值的一部分(使用/%!)作为整数,中间有'.'

在此期间,请尝试std::fixed

答案 1 :(得分:1)

要解决此问题,您应该为cout使用固定的浮点表示法。您可以找到更多信息here

尝试将addind cout << fixed添加到您的代码中,如下面的代码所示。要将精度设置为2,您可以使用precision属性。

cout << fixed;
cout.precision(2);

以下是完整的代码:

using namespace std;

int main() {

    cout << fixed;
    cout.precision(2);

    if (totalCostHybrid < totalCostNonHybrid) {
            cout << "Hybrid car: " << endl;
            cout << "Total cost: " << totalCostHybrid << endl;
            cout << "Total gallons used: " << milesPerYear / hybridEffic << endl;
            cout << "Total gas cost: " << gasCostHybrid << endl;
            cout << "Non-hybrid car: " << endl;
            cout << "Total cost: " << totalCostNonHybrid << endl;
            cout << "Total gallons used: " << milesPerYear / nonHybridEffic << endl;
            cout << "Total gas cost: " << gasCostNonHybrid << endl;
            cout << "Hybrid is cheaper!" << endl;
     }
}

答案 2 :(得分:0)

欺骗和看纯粹主义者发疯了......

    double time;  //Only want two decimal places.
    double timeCon = time * 100.0;  //Pull out the two decimals I want.
    int timeCut = timeCon;  //Cut all decimal values.
    double timeRevert = timeCut / 100.0;  //Laugh.
    cout << timeRevert << endl;  //Watch heads explode.