Как напечатать точные цифры после E в научной нотации в c ++ - PullRequest
0 голосов
/ 09 июля 2019

вывод кода равен 1.068950000E + 002 вместо требуемого выхода 1.068950000E + 02

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
   double c=106.895;
   cout<<fixed<<setprecision(9)<<std::scientific<<C<<endl;
   return 0;
}

1 Ответ

1 голос
/ 09 июля 2019

Вы не можете установить количество цифр выведенного показателя в научной нотации, используя стандартные манипуляторы в C ++.

Одна вещь, которую вы можете сделать, это удалить или добавить '0' к результирующей строкепри необходимости.

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <algorithm>

int main()
{
    double c = 106.895;
    std::stringstream ss;
    ss.setf(std::ios_base::scientific | std::ios_base::uppercase);
    ss << std::setprecision(9) << c;
    auto number = ss.str();

    // you can add the '0' if needed
    size_t pos = number.size() - 3;
    if ( !std::isdigit(int(number[pos])) )
    {
        if ( number[pos] == 'E' )
            number.insert(pos + 1, "+0");
        else
            number.insert(pos + 1, 1, '0');
    }

    std::cout << number << '\n';  // --> 1.068950000E+002

    // Or remove it
    size_t pos_0 = number.size() - 3;
    if ( number[pos_0] == '0' )
        number.erase(pos_0, 1);
    std::cout << number << '\n'; // --> 1.068950000E+02
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...