C: Любой способ преобразовать текстовую строку в float, т.е. 1e100? - PullRequest
3 голосов
/ 18 февраля 2011

К сожалению, в этом журнале у меня есть несколько строк с этой нотацией (1.00e4), я знаю, что могу использовать printf со спецификатором "%e" для создания этой нотации, как мне ее прочитать?

К сожалению, strtof и scanf возвращают 0,00000 на "1e100", мне нужно написать собственный парсер для этого?

(обновлено)

Что я имею в качестве ввода:
строка "4.1234567e5" или "4.5e5"

Желаемый вывод:
float 412345.67 или целое число "450000"

Ответы [ 3 ]

3 голосов
/ 18 февраля 2011

Вы также можете использовать

double atof( const char * str );
2 голосов
/ 18 февраля 2011

Начните с этого кода:

#include <stdio.h>
int main (void) {
    double val;
    double val2 = 1e100;
    sscanf ("1e100", "%lf", &val);  // that's an letter ELL, not a number WUN !
    printf ("%lf\n", val);          // so is that.
    printf ("%lf\n", val2);         // and that.
    return 0;
}

Он выводит:

10000000000000000159028911097599180468360810000000000...
10000000000000000159028911097599180468360810000000000...

Причина, по которой это не совсем 1 100 , заключается в природе плавающего IEEE754точечные значения.Изменив его на:

#include <stdio.h>

int main (int argc, char *argv[]) {
    double val;
    int i;
    for (i = 1; i < argc; i++) {
        sscanf (argv[i], "%lf", &val);
        printf ("   '%s' -> %e\n", argv[i], val);
    }
    return 0;
}

и запустив его с примерами аргументов, вы получите:

pax$ ./qq 4.1234567e5 4.5e5 3.47e10 3.47e-10
   '4.1234567e5' -> 4.123457e+05
   '4.5e5' -> 4.500000e+05
   '3.47e10' -> 3.470000e+10
   '3.47e-10' -> 3.470000e-10
0 голосов
/ 18 февраля 2011

Не работает, если я использую тип данных с плавающей точкой.Возможно, проблема в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...