Я сталкиваюсь с проблемой форматирования значений с плавающей запятой в смысле возврата к «форматированию по умолчанию».Скажем, у меня есть 2 числа с плавающей точкой:
float f1 = 3.0f, f2 = 1.5f;
std::cout << f1 << " - " << f2 << "\n";
покажет их как: 3 - 1.5
Теперь по какой-то причине мне нужно установить точность на std::cout
(для другой печати):
cout << std::precision(2);
Если я снова напечатаю два моих поплавка, это приведет к: 3.00 - 1.50
Теперь я хочу вернуться к форматированию по умолчанию.До C ++ 11 это кажется трудным (или это было?).Но, спасибо, я теперь получил этот новый флаг: std :: defaultfloat .Давайте попробуем:
std::cout << std::defaultfloat << f1 << " - " << f2;
напечатает: 3 - 1.50
.Хорошо.
О, но подождите .Скажем, у меня вместо этого:
float f1 = 444.0f, f2 = 444.5f;
Печать по умолчанию покажет: 444 - 444.5
Точность установки (и «фиксированная»):
cout << std::precision(2) << std::fixed;
покажет: 444.00 - 444.50
Но при возврате к «по умолчанию»:
std::cout << std::defaultfloat << f1 << " - " << f2;
выведет: 4.4e+02 - 4.4e+02
(автоматическое переключение на научный формат).И, если вам интересно, добавление «фиксированного» флага сохранит ранее назначенную точность, таким образом, не вернувшись к исходным настройкам.
Вопрос : Как вернуться к значениям по умолчанию?mode?
FWIW, живой код здесь .
Редактировать : этот вопрос был отмечен как дублирующий, но связанный ответ не дает ответа на вопрос, он только упоминает, как получить текущую точность.
Редактировать 2 : по запросу приведен полный код, демонстрирующий проблему:
int main()
{
float f1 = 444.5f, f2=443.0f;
std::cout << f1 << " - " << f2 << "\n";
std::cout << std::fixed << std::setprecision(2);
std::cout << f1 << " - " << f2 << "\n";
std::cout << std::defaultfloat;
std::cout << f1 << " - " << f2 << "\n";
}
И результат:
444.5 - 443
444.50 - 443.00
4.4e+02 - 4.4e+02