验证中...
开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约
gistfile1.txt
原始数据 复制代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char unsigned negative;
char s[12]; //浮点数对应的字符串
char str[11]; //去除小数点后的字符串,用于数码管显示
char unsigned AfterDot_w;//小数点后的位数用于精度控制。
char unsigned dotpos;
}newfloat_typedef;
newfloat_typedef myf={0};
/*
功能:将输入的浮点数按照指定的控制显示宽度转换成字符串,并得到字符串的长度,小数点后的位数
*/
newfloat_typedef Get_newsfromfloat(const float data,unsigned char DispW)
{
newfloat_typedef tmpf={0};
char string[7];
char *pchar ;
unsigned char i,j;
if((int)data&0x80000000)
{
tmpf.negative =1;//负数
DispW +=1;
}
sprintf(tmpf.s,"%*f",DispW,data);
//tmpf.s[5]=0;//强制设置结束符
tmpf.s[DispW]=0;//强制设置结束符
pchar=strstr(tmpf.s,".");
if(pchar!=NULL)
{
tmpf.AfterDot_w =strlen(pchar)-1;//小数点后的位数,去除小数点
for(i=j=0;i<strlen(tmpf.s);i++)
{
if(tmpf.s[i]!='.')
{
tmpf.str[j++]=tmpf.s[i];
}
}
tmpf.str[j]='\0';
}
else
{
tmpf.AfterDot_w =0;
}
tmpf.dotpos =-tmpf.AfterDot_w*2+8;//第一个数码管位置为1,且每两个数码管中间一个小数点
if(tmpf.negative ==1)
{
// string[0]='-';
// i=strlen(tmpf.str);
// strncpy(&string[1],tmpf.str,i);
// strncpy(tmpf.str,&string[0],i);
// tmpf.str[i+2]='\0';
// string[0]='-';
// i=strlen(tmpf.s);
// strncpy(&string[1],tmpf.s,i);
// strncpy(tmpf.s,&string[0],i+1);
// tmpf.s[i+2]='\0';
}
return tmpf;
}
int main()
{
float f=-211.4;
myf =Get_newsfromfloat(f,5);
//myf =Get_newsfromfloat(f);
printf("%s\n",myf.s);
printf("%s\n",myf.str);
printf("%d\n",myf.AfterDot_w);
printf("%d\n",myf.dotpos);
return 0;
}

评论列表( 0 )

你可以在登录后,发表评论

搜索帮助