Управление точностью, отображаемой при удвоении

#c #string #double #double-precision

#c #строка #удвоение #двойная точность

Вопрос:

Есть ли простой способ в c увеличить точность удвоения, которая равна:

Например

  double d = 3.6
  

было бы

 d = 3.600 (adding 2 zeros)
  

затем этот d отправляется в класс string

 std::to_string(d);
  

Вы можете спросить, почему? Я использую графический интерфейс (gtkmm), и в текстовом представлении каждое полученное число должно иметь одинаковую длину.

Это результат, если длина не одинакова:

 4.396       3.957       11
4.183       3.783       10
3.959       3.6     9
3.723       3.404       8
3.474       3.194       7
3.207       2.967       6
2.919       2.719       5
  

Возможно ли увеличить десятичные дроби, то есть добавить дополнительные нули, когда значение является примитивным, или мне нужно потом манипулировать строкой?

РЕДАКТИРОВАТЬ: я должен был быть более ясным — меня не интересует std::cout . Выходные данные выше представляют графический интерфейс

Комментарии:

1. Вы можете использовать sprintf для печати большего количества десятичных цифр

Ответ №1:

Технически вы не изменяете точность типа double . Чтобы добавить «дополнительные нули», если число слишком короткое, вы можете использовать std::stringstream следующее:

 std::stringstream s;
double d = 3.6;
s << std::fixed << std::setprecision(3) << d;
std::string res = s.str();
std::cout << res;
  

Live demo

Вышеописанное установит точность цифр на 3 цифры и печать 3.600 .

Комментарии:

1. спасибо, я изучу это и, возможно, приму ответ

2. @user3155478 Вы должны включить <iomanip> , как в живой демонстрации.

3. Большое спасибо — он скомпилировался, но при запуске произошел сбой. Я не использовал отладчик, но я проверил, чтобы изменить std::stringstream на std::ostringstream. Теперь это работает 🙂 🙂 .. но мне интересно, почему приложение вылетает с std::stringstream?