Установка минимального количества знаков после запятой для std:: ostream precision
есть ли способ установить "минимальное" количество десятичных знаков, которые выводит 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
?
спасибо! Фил!--7-->
короткий ответ на это "нет". Поток имеет только одну установку точности, без средства для того чтобы различить между максимальной и минимальной точностью. Спасибо всем за ваш щедрый совет!
2 ответов
Я не думаю, что есть способ достичь того, что вы просите, не превращая число в строку (с высокой точностью) и не удаляя конечные нули.
это уместно, потому что только потому, что есть конечные нули, не означает, что там нет точности, и время выполнения не может этого сказать.
например, если я измеряю вес объекта с помощью дешевой шкалы, это может быть 1.0 kgs.
Если я взвешиваю его с помощью шкалы высокой точности, это может быть 1.00000 килограмм. Только потому, что есть конечные нули, не означает, что точность должна быть отброшена.
cout << setprecision(1) << fixed << d << endl;
используется после setprecision.
Edit: это то, что вы хотите. Это изменит точность на основе d.
cout << setprecision(d?9:1) << fixed << d << endl;