如何仅使用固定的<< setprecision(2)一次?还是至少恢复默认行为?

问题描述 投票:0回答:3

这是显示功能的内部。我想使用2个小数点打印重量。在此代码块之外,我不会将setprecision设置为有效。例如,777.555和444.2222应该正确显示。

        // Detect if train has cargo:
        if (cargo_unit)
        {
            // If cargo exists, print output:
            cout << **fixed << setprecision(2);**
            cout << "   Cargo: " << cargo_unit->getDesc() <<
            endl << "  Weight: " << cargo_unit->getWeight() << endl;
        }

问题是,一旦我使用固定的<< setprecision,我只能将其重置为5或6之类的数字,然后得到此信息:

777.555000444.222200

c++ std fixed cout
3个回答
1
投票

您可以保存先前的标志和精度,然后再将其还原,例如:

// Detect if train has cargo:
if (cargo_unit)
{
    // If cargo exists, print output:

    std::ios_base::fmtflags old_flags = cout.flags();
    std::streamsize old_prec = cout.precision();
    std::cout << std::fixed << std::setprecision(2);

    /* alternatively:
    std::ios_base::fmtflags old_flags = cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
    std::streamsize old_prec = cout.precision(2);
    */

    std::cout << "   Cargo: " << cargo_unit->getDesc() <<
    std::endl << "  Weight: " << cargo_unit->getWeight() << std::endl;

    cout.precision(old_prec);
    cout.flags(old_flags);
}

0
投票

使用std::defaultfloat重设std::fixed

访问this link了解更多信息。


0
投票

这是一种使用std :: cout.precision()的替代方法,可以在将默认精度更改为2之前保存默认精度,然后在需要时将其恢复为默认值。

...
// save current precision
std::streamsize ss = std::cout.precision();

// Detect if train has cargo:
if (cargo_unit)
{
    // If cargo exists, print output:
    cout << **fixed << setprecision(2);**
    cout << "   Cargo: " << cargo_unit->getDesc() <<
    endl << "  Weight: " << cargo_unit->getWeight() << endl;
}

// Restore saved precision
std::cout << std::setprecision(ss);
...
© www.soinside.com 2019 - 2024. All rights reserved.