Я не уверен, какой компилятор C ++ вы используете, который дает вам 3 цифры для показателя степени - для стандартов C и C ++ для этого требуется минимум 2 цифры, и именно это делает g ++.Невозможно получить только одну цифру, используя стандартные функции ввода / вывода C или C ++, поэтому вам придется развернуть собственное решение.Поскольку преобразование с плавающей точкой в строку - очень сложная проблема [PDF], я настоятельно рекомендую не делать этого и вместо этого обрабатывать результат.
Вот один из способов сделать это:
// C version; you can rewrite this to use std::string in C++ if you want
void my_print_scientific(char *dest, size_t size, double value)
{
// First print out using scientific notation with 0 mantissa digits
snprintf(dest, size, "%.0e", value);
// Find the exponent and skip the "e" and the sign
char *exponent = strchr(dest, 'e') + 2;
// If we have an exponent starting with 0, drop it
if(exponent != NULL && exponent[0] == '0')
{
exponent[0] = exponent[1];
exponent[1] = '\0';
}
}