有的编程环境中不能直接使用sprintf库函数,这样就需要自己编写一个函数实现小数(浮点数)或整数转成字符串。
编程代码如下:
#include <stdio.h>
void floatToString(float f,char str[])
{
int data = 0;
int n = 0;
int i = 0;
int len = 0;
char strTemp[20] = "";
for(i=0;i<10;i++) // 清空数组
{
str[i] = 0;
}
if(f>=1)
{
data = (int)(f*1000);
if(data%10 >= 5) // 四舍五入
{
data = (data/10)+1;
}
else
{
data = data/10;
}
while(data)
{
strTemp[n++] = data%10+'0';
data = data/10;
}
for(i=0;i<n;i++)
{
str[i] = strTemp[n-i-1];
}
}
else if(f<=-1)
{
data = (int)(-1*(f*1000));
if(data%10 >= 5) // 四舍五入
{
data = (data/10)+1;
}
else
{
data = data/10;
}
while(data)
{
strTemp[n++] = data%10+'0';
data = data/10;
}
str[0] = '-';
for(i=1;i<=n;i++)
{
str[i] = strTemp[n-i];
}
}
else
{
if(f>=0)
{
data = (int)((f+1)*1000);
if(data%10 >= 5) // 四舍五入
{
data = (data/10)+1;
}
else
{
data = data/10;
}
printf("data = %d\n",data);
while(data)
{
strTemp[n++] = data%10+'0';
data = data/10;
}
for(i=0;i<n;i++)
{
str[i] = strTemp[n-i-1];
}
str[0] = '0';
}
else
{
data = (int)(-1*((f-1)*1000));
if(data%10 >= 5) // 四舍五入
{
data = (data/10)+1;
}
else
{
data = data/10;
}
while(data)
{
strTemp[n++] = data%10+'0';
data = data/10;
}
str[0] = '-';
for(i=1;i<=n;i++)
{
str[i] = strTemp[n-i];
}
str[1] = '0';
}
}
for(i=0;i<20;i++)
{
if(0 == str[i])
{
break;
}
strTemp[i] = str[i];
len++;
}
str[len-2] = '.';
str[len-1] = strTemp[len-2];
str[len] = strTemp[len-1];
str[len+1] = 0;
}
void main()
{
char str[10] = "";
float f = 0;
while(1)
{
scanf("%f",&f);
floatToString(f,str);
puts(str);
}
}
实现效果:
程序中还是有一点bug,各位测试使用,需要简单优化🙂!!!