怎样把浮点数转换成字符串?

zzol 2004-12-20 04:06:32
怎样把浮点数转换成字符串?
自带的函数itoa,ltoa都是转换整数的,遇到浮点数,双精度的数怎么办?
...全文
14779 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
janeSatan 2004-12-20
  • 打赏
  • 举报
回复

在将浮点型数字转换为字符串时,需要使用另外一组函数。
以下是用fcvt()函数将浮点型值转换为字符串的一个例子:
# include <stdio. h>
# include <stdlib. h>
void main (void);
void main (void)
{
double num = 12345.678;
char * sir;
int dec_pl, sign, ndigits = 3; /* Keep 3 digits of precision. * /
str = fcvt(num, ndigits, &dec-pl, &sign); /* Convertthe float to a string. * /
printf("Original number; %f\n" , num) ; /* Print the original floating-point value. * /
printf ("Converted string; %s\n",str); /* Print the converted string'svalue. * /
printf ("Decimal place: %d\n" , dec-pi) ; /* Printthe location of the decimal point. * /
printf ("Sign: %d\n" , sign) ; /* Printthe sign.0 =positive,1 =negative. * /
}
fcvt()函数和itoa()函数有数大的差别。fcvt()函数有4个参数:第一个参数是要转换的浮点型值;第二个参数是转换结果中十进制小数点右侧的位数;第三个参数是指向一个整数的指针,该整数用来返回转换结果中十进制小数点的位置;第四个参数也是指向一个整数的指针,该整数用来返回转换结果的符号(0对应于正值,1对应于负值)。需要注意的是,fcvt()函数的转换结果中并不真正包含十进制小数点,为此,fcvt()函数返回在转换结果中十进制小数点应该占据的位置。在上例中,整型变量dec_pl的结果值为5,因为在转换结果中十进制小数点应该位于第5位后面。如果你要求转换结果中包含十进制小数点,你可以使用gcvt()函数(见下表)。下列函数可以将浮点型值转换为字符串:
---------------------------------------------------------
----------------
函数名作用
---------------------------------------------------------
----------------
ecvt() 将双精度浮点型值转换为字符串,转换结果中不
包含十进制小数点
fcvt() 以指定位数为转换精度,余同ecvt()
gcvt() 将双精度浮点型值转换为字符串,转换结果中包
含十进制小数点
---------------------------------------------------------
}
snow810211 2004-12-20
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>

void main( void )
{
char buffer[50];
double source = -0.14150;
_gcvt( source, 4, buffer );
printf( "source: %f buffer: '%s'\n", source, buffer );
system("pause");
}
snow810211 2004-12-20
  • 打赏
  • 举报
回复
char * _fcvt(double value,int dount,int *dec,int *sign);
说明:
value 为要被转换的数值
count 为小数点后的位数
dec 为小数点所在位置
sign 为正负号,0代表正,非0整数代表负

#include <stdio.h>
#include <stdlib.h>
void main()
{
int dec,sign;
char *temp;
//double value=0.1256;
double value=-0.01256;
temp=_fcvt(value,3,&dec,&sign);
printf("String after convert :%s\n",temp);
printf("Decimal :%d\n",dec);
printf("sign :%d\n",sign);
}
winstonch 2004-12-20
  • 打赏
  • 举报
回复
skfox(sky)的方法不错,但是不能完全复原,不知道楼主是否有这样的要求,要是那样的话可就没这么简单了
master5470 2004-12-20
  • 打赏
  • 举报
回复
关注中,好问题!
skfox 2004-12-20
  • 打赏
  • 举报
回复
char chFloat[20];
memset(chFloat,'\0',sizeof(chFloat));
float iF =9.89;
sprintf(chFloat,"%f",iF);
printf("%s\n",chFloat);
absolutelyzero_p 2004-12-20
  • 打赏
  • 举报
回复
关注

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧