Установка минимального количества знаков после запятой для точности std::ostream

StackOverflow https://stackoverflow.com/questions/2489627

Вопрос

Есть ли способ установить "минимальное" количество знаков после запятой, которое будет выводить 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top