Нахождение научной нотации (E + XX)

0

Я пытаюсь найти научную нотацию с двойным, и я не мог найти никакой функции или способа сделать это.

Моя переменная двойная, и мне нужно получить от нее научную нотацию, например:

3. 44828e+ 026

Мне нужно как-то получить номер 026 из моей двойной переменной.

Кстати, число на самом деле 28 длинных, а не 26, есть ли способ исправить это тоже? (не добавляя 2 к результату)

Заранее спасибо!

Теги:
double
scientific-notation

2 ответа

1
Лучший ответ

Это должно работать, если y неотрицательно. Для отрицательного y результат получается отдельно. При необходимости исправьте его.

#include <iostream>
#include <cmath>

int main()
{
    double x = 3.44828e+026;
    int y = (int)log10(x);
    std::cout << y << std::endl;  
    return 0;
}

Выход: 26

1

Ответ аналогичен Ю Хао, но этот, похоже, работает и для отрицательных экспонентов (но я не полностью его протестировал):

#include <iostream>
#include <cmath>

// pre-condition: x != 0.0
int exponent(double x) {
    double y = log10(x);
    if (y < 0.0)
        y -= 1.0;
    return static_cast<int>(y);

}

int main() {
    std::cout << exponent(3.44828e+026) << '\n';
    std::cout << exponent(3.44828e-026) << '\n';
}

Выходы 26 и -26.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню