将一个浮点数转化成字符串的程序

求助:将一个浮点数转化成字符串的程序,不用库函数,要求与sprintf(str,"%f",f);函数实现的功能一样。谢谢问题补充:用C语言实现... 求助:将一个浮点数转化成字符串的程序,不用库函数,要求与sprintf(str,"%f",f);函数实现的功能一样。
谢谢问题补充:

用C语言实现
展开
 我来答
yz330
2015-12-10 · 知道合伙人法律行家
yz330
知道合伙人法律行家
采纳数:7593 获赞数:50559
本人毕业于北京公安大学,本科学历,刑警专业毕业,有30年公安工作经验。

向TA提问 私信TA
展开全部
//将浮点数转换为字符串并显示
//函数名:cage
#include<stdio.h>
Void
main(void)
{
float
f=1.2356
//要转的浮点数可以有键盘输入,这个读者可以自行设定
uchar
u[12]={
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'.'
,
'\0'
};
uchar
str[12]={
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
,
'\0'
};
int
g,h,j1,j2,k,n=1,m=0;
//定义要用到的循环变量和计数量
float
t=0;
long
int
x1=0,x2=0,y=0,z=0,p,l=1,o=1;
t=f;
x1=t*1000;
_NOP();
x2=t*1000;
_NOP();
for
(j1=0;j1<12;j1++)
{
x1=x1/10;
_NOP();
if
(x1==0)
break
;
else
n++;
}
for
(j2=0;j2<12;j2++)
{
y=x2%10;
_NOP();
x2=x2/10;
_NOP();
if
(y==0)
m++;
else
break
;
}
for
(h=0;h<(3-m);h++)
{
l=l*10;
_NOP();
}
for
(g=0;(g<n-m-1);g++)
{
o=o*10;
_NOP();
}
z=f*l;
for
(k=0;k<n-m+1;k++)
{
if
(k==n-3)
continue
;
else
{
p=z/o;
str[k]=u[p];
z=(z-p*o)*10;
_NOP();
}
}
if
(m!=3)
str[n-3]=u[10];
str[n-m+1]=u[11];
_NOP();
_NOP();
}
1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九贰肆陆扒拾,
zzh5682
2010-12-01 · TA获得超过143个赞
知道小有建树答主
回答量:77
采纳率:100%
帮助的人:79万
展开全部
#include <stdio.h>

void main()
{
//存储可能用到的字符
char dictionary[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
//转换后存储在字符数组中
char str[8];
//临时字符数组空间
char tmp_array[8];
//输入的浮点数
float f_num = 0.0;
//浮点数临时变量
float f_num_tmp = 0.0;
//浮点数整数部分
int int_tmp;
//小数点后的数
int tmp;
//标志位
int i = 0, j = 0;
//统计字符数
int count = 0;
//输入数字
scanf("%f",&f_num);
//分离出整数部分
int_tmp = f_num;
//将整数部分按倒序存入tmp_array
while(int_tmp)
{
tmp = int_tmp%10;
tmp_array[count] = dictionary[tmp];
int_tmp = int_tmp/10;
count++;
}
//重新记录int_tmp的值
int_tmp = f_num;

j = count-1;
//按正序将整数部分存入
for(i=0;i!=count;i++)
{
str[i] = tmp_array[j];
j--;
}
//存入小数点
str[i] = '.';
count++;

f_num_tmp = ( f_num - int_tmp)*10;
//存入小数部分
while((int)f_num_tmp)
{
tmp = f_num_tmp;
str[count] = dictionary[tmp];
f_num_tmp = (f_num_tmp-tmp)*10;
count++;
if(count==8){
str[7] = '\0';
break;
}

}

for(i = 0;i!=8;i++)
{
printf("%c",str[i]);
}
}
程序是按着float 6个有效位写得,没有考虑double双精度的情况,无扩展,大概思想在这,能力有限,可能不够高效,楼主可以参考一下,呵呵~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式