Преобразование научной нотации в десятичную в C ++ - PullRequest
3 голосов
/ 23 февраля 2012

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

Если у меня 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 в конец и, если возможно, удалить их.

Ответы [ 3 ]

4 голосов
/ 23 февраля 2012

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

2 голосов
/ 23 февраля 2012

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

void conversion(double counts)
{
  std::ostringstream ss;
  ss.precision(1);
  ss << std::fixed << counts;
  std::cout << ss.str() << " MeV";
}
0 голосов
/ 23 февраля 2012

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

...