Я пытаюсь найти научную нотацию с двойным, и я не мог найти какую-либо функцию или способ сделать это.
Моя переменная двойная, и мне нужно получить из нее научное обозначение, например:
3.44828e +026
Мне нужно как-то получить номер 026 из моей двойной переменной.
Кстати, число на самом деле 28, а не 26, есть ли способ исправить это тоже? (не добавляя 2 к результату)
Заранее спасибо!
Это должно работать, если 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
Ответ, аналогичный ответу Ю Хао, но этот, похоже, работает и для отрицательных показателей (но я не полностью его проверил):
#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
,