Преобразование экспоненциальной записи в десятичную в C++

Я хочу иметь возможность выводить в десятичном, а не научном формате для всех случаев в моем коде.

Если у меня 122041e+08, я хочу, чтобы он отображался как 122041000.

Если у меня 4.6342571e+06, я хочу, чтобы он отображался как 4634257.1.

... и так далее.

Используя мой код, вывод для 4.6342571e+06 равен 4634257.100000.

void conversion(double counts)
{
  std::ostringstream ss;
  ss << std::fixed << counts;
  std::cout << ss.str() << " MeV";
}

Может кто-нибудь объяснить мне, почему он добавляет 0 в конец и можно ли их удалить.


person Robert Whitley    schedule 23.02.2012    source источник


Ответы (3)


В потоке выходных строк есть метод, который называется precision. Вы можете использовать его для настройки количества цифр после запятой. По умолчанию он равен 6, а недостающие цифры заполняются нулями (отсюда и фиксированное имя). Чтобы добиться отображения 4634257.1, установите точность на 1:

void conversion(double counts)
{
  std::ostringstream ss;
  ss.precision(1);
  ss << std::fixed << counts;
  std::cout << ss.str() << " MeV";
}
person jupp0r    schedule 23.02.2012

Вы можете использовать std::setprecision.

person Oliver Charlesworth    schedule 23.02.2012
comment
ideone.com/5CmObK см. здесь научное число преобразуется в обычное число с плавающей запятой с использованием std::fixed, а не std::setprecision. Я не утверждаю, что моя точка зрения верна, но я говорю вам то, что наблюдаю. Я новичок в c++; - person Abhishek Mane; 14.06.2021

Он добавляет нули, потому что вы (неосознанно) попросили их. Точность по умолчанию равна 6, а в фиксированном формате это означает 6 цифр после запятой (независимо от того, сколько до). Точность имеет разное значение в зависимости от формата, используемого для вывода. (Что звучит не очень ортогонально, но хорошо работает на практике, если знать, чего ожидать.)

person James Kanze    schedule 23.02.2012