2012-02-23 8 views
3

Я хочу, чтобы иметь возможность выводить в десятичной и не научной для всех случаев в моем коде.Преобразование научной нотации в десятичную в 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 'до конца и, если это возможно, чтобы удалить их.

ответ

2

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

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

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

Смежные вопросы