Установка минимального количества знаков после запятой для точности std::ostream
Вопрос
Есть ли способ установить "минимальное" количество знаков после запятой, которое будет выводить std::ostream?
Например, допустим, у меня есть две неизвестные двойные переменные, которые я хочу распечатать (значения добавлены здесь для иллюстрации).:
double a = 0;
double b = 0.123456789;
Я могу установить свою максимальную десятичную точность, чтобы выводить b
именно так
std::cout << std::setprecision(9) << b << std::endl;
>>> 0.123456789
Есть ли способ установить "минимальную" точность (минимальное количество знаков после запятой), сохраняя при этом "максимальную" точность, чтобы
std::cout << a << std::endl << b << std::endl;
урожайность
0.0
0.123456789
не
0
0.123456789
?
Спасибо!Фил
короткий ответ на этот вопрос - "Нет".Поток имеет только одну настройку точности, без возможности различать максимальную и минимальную точность.Спасибо всем за ваши щедрые советы!
Решение
Я не думаю, что есть способ достичь того, о чем вы просите, без превращения числа в строку (с высокой точностью) и удаления конечных нулей.
Это уместно, потому что то, что в конце есть нули, не означает, что там нет точности, и время выполнения не может этого определить.
Например, если я измеряю вес предмета с помощью дешевых весов, он может составлять 1,0 кг.
Если я взвеслю его на высокоточных весах, он может составить 1.00000 кг.Просто потому, что есть конечные нули, не означает, что от точности следует отказаться.
Другие советы
cout << setprecision(1) << fixed << d << endl;
Используется исправлено после setprecision.
Редактировать:Это то, чего ты хочешь.Это изменило бы точность на основе d.
cout << setprecision(d?9:1) << fixed << d << endl;