浮点指向字符串表示

时间:2014-06-24 08:44:57

标签: c floating-point string-formatting

请考虑以下代码段:

char str[1000];
float b ;
b= 0.0615;
sprintf( &(str[0]), "%1.0e", b);

执行完最后一个语句后,我希望str包含6.15e-2。但是,我的值为5e-315

我哪里错了。如何获得预期值?

3 个答案:

答案 0 :(得分:1)

您不能使用该格式字符串获得两位数的精度,因为您在逗号后只指定了一位数(即1之后的.0部分)。

对我有用的是

#include <stdio.h>
#include <string.h>

main() {
    char str[1000];
    float b ;
    b= 0.0615;
    sprintf( &(str[0]), "%.2e", b);
    puts(str);
}

打印 6.15e-02

almighty C/C++ documentation说:

  

.number:

     

对于a,A,e,E,f和F说明符:这是要的位数   在小数点后打印(默认情况下,这是6)。

答案 1 :(得分:1)

我打赌你忘了包括stdio.h

编译器传递给sprintf的类型与sprintf实际读取的类型之间似乎不匹配(如cmaster's answer中所述)。

答案 2 :(得分:0)

显然,您的编译器没有意识到sprintf()将所有浮点参数都视为double。因此,它仅将float的32位传递给函数,该函数错误地将64位解释为double。如果您将float转换为double,然后再将其传递给sprintf(),它应该可以正常工作。