|
今天遇到的问题, 在论坛中有提及,但是给出的方法我越看越乱,没有一个很清晰的实现,
总是要关联什么库,有用dtostrf()的, 还有用fdevopen()的,这些函数我都没有查到用法, 就自己实现了一下。
发表出来,免得再有人走弯路。
程序部分代码如下:
float fdata = 12.3456;
char str[10];
sprintf(str, "%.4f", fdata);
此时得到的str中的内容是?.
经过查证,AVR-GCC下的sprintf()确实不支持%f,但是却支持%d. 然后通过以下方式可以解决。
int resolution = 2;
for(i=0;i<decbits;i++) m*=10;
int k = fData*m;
int l = (int)fData*m;
int f = k -l;
sprintf(str, "%d.%d", (int)fData,f); 这样就解决了。
如果写成sprintf(str, "%d.%d", (int)fData,(fData-(int)fData)*m);则是错误的,为什么? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|