C:任何将文本字符串转换为float的方法,即1e100?

时间:2011-02-18 08:32:21

标签: c string math

不幸的是在这个日志中我有一些带有该符号的字符串(1.00e4),我知道我可以使用带有"%e"说明符的printf来创建该表示法,我将如何阅读它?

不幸的是strtof和scanf似乎在“1e100”上返回0.00000,我是否需要为此编写自己的解析器?

(更新)

我有什么输入:
字符串“4.1234567e5”或“4.5e5”

期望的输出:
float 412345.67,或整数“450000”

3 个答案:

答案 0 :(得分:3)

您也可以使用

double atof( const char * str );

答案 1 :(得分:2)

从这段代码开始:

#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

答案 2 :(得分:0)

如果我使用float数据类型,它不起作用。也许问题出在那里。