c++ 如何只使用一次fixed < < setprecision(2)?或者至少恢复到默认行为?

q3aa0525  于 2023-10-20  发布在  其他
关注(0)|答案(3)|浏览(148)

这是一个显示函数的内部。我想用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;
}

问题是,一旦我使用了fixed << setprecision,我只能将它重置为5或6这样的数字,然后得到这个:

777.555000
444.222200
mrphzbgm

mrphzbgm1#

您可以保存以前的标志和精度,然后恢复它们,例如:

// 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);
}
oaxa6hgo

oaxa6hgo2#

使用std::defaultfloat重置std::fixed
请访问this link了解更多信息。

zmeyuzjn

zmeyuzjn3#

这里有一种替代方法,使用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);
...

相关问题