这是显示功能的内部。我想使用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
您可以保存先前的标志和精度,然后再将其还原,例如:
// 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);
}
使用std::defaultfloat
重设std::fixed
。
访问this link了解更多信息。
这是一种使用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);
...