请考虑以下代码段:
char str[1000];
float b ;
b= 0.0615;
sprintf( &(str[0]), "%1.0e", b);
执行完最后一个语句后,我希望str
包含6.15e-2
。但是,我的值为5e-315
。
我哪里错了。如何获得预期值?
答案 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()
,它应该可以正常工作。