1093562897 发表于 2021-7-31 16:04 学习了!这个解决了我的问题! |
|
直接写个浮点数转字符串的函数试试 void flo_to_str(float flo,char* str_,int n) { int temp,i,j; if (flo>=0) str_[0]='+'; else { str_[0]='-'; flo = -flo; } temp = (int)flo; for(i=0;temp!=0;i++) { temp /=10; } temp = (int)flo; for (j=i;j>0;j--) { str_[j] = temp%10+'0'; temp /=10; } str_[i+1] = '.'; flo -=(int)flo; for (i=i+2;i<n;i++) { flo *=10; str_[i] = (int)flo+'0'; flo -=(int)flo; } //str_[n-1] = '\0'; } |
|
拿来主义并不好,我也是刚好这几天在做这个OLED(SH1106驱动)显示,然后也是上网找,书本翻,烧录上百次才理解这个函数,从不仿真,那太坑人了 //======================================================================================== void Display_oled_double(unsigned char Page,unsigned char Start_SEG,double dat) //显示一个双精度浮点数据 { char k[12]; //这里不能加code限定符,否则计算不正确 unsigned char a; sprintf(k,"%.2f",dat);//dat是一个浮点数,可以其它类型,unsigned char unsigned long int.......都行,无所谓的,2f是取两个小数点后面的数1.00这样 for(a=0;k[a]!='\0';a++)//这个是检测字符串有没有结束,C语言字符是以'\0'为结尾的 { Display_oled_Shuzi_1(Page,Start_SEG,k[a]); //这是显示函数,你自己写 Start_SEG=Start_SEG+8; } } sprintf实际上是把bat分解成字符串,然后分别存放在数组 k中,一个地址存放一个字符串.k的长度10个左右就差不多了 比如:bat为:12.345 那么,sprintf执行之后 K的0地址为"1" 1地址为"2" 2地址为"." 3地址为"3" 4地址为"4" 后面的"5"就没有了,因为"%.2f"指定小数点后面只有两位数,你也可以试下"%.5f"看一下是什么样子的 记住,数组里存放的是字符串,不是字符!!!!!! 所以,0地址的值实际上是1在ASCII中的值:49 这个函数会自动处理负号和小数点,最后会以'\0'结束,检测有没有'\0'就可以了 |
| 把浮点数放大,变成整形打印,然后自己想办法换算显示。 |
|
#include了stdio.h吗? sprintf不能这样用的吧? 正确用法:
floVal 是一个浮点数 |
| fadc3jieguo是一个浮点数 |