`
liukexiong
  • 浏览: 83510 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

将一个浮点数转换为字符串(有bug,不知道什么原因)

 
阅读更多
/*
 * 将一个浮点数转换为字符串
 * 例如:123.456转换为"123.456"
 */
#include<stdio.h>
#include<stdlib.h>

char *convert(double d)
{
	//代表浮点数d的整数部分
	int d1=(int)d;
	//代表浮点数d的小数部分
	double d2=d-d1;
	//用来存储浮点数d的整数部分
	int a[20];
	//用来存储浮点数d的小数部分
	int b[20];
	int aloc=0;
	int bloc=0;
	int i=0;
	//将整数部分装入数组a中
	while(d1>0)
	{
		int temp=d1%10;
		a[aloc]=temp;
		aloc++;
		d1/=10;
	}
	//将小数部分装入数组b中
	while(d2>0.00001)
	{
		d2*=10;
		int temp=(int)d2;
		b[bloc]=temp;
		bloc++;
		d2-=temp;
	}

	printf("aloc=%d\n",aloc);
	printf("bloc=%d\n",bloc);

	//申请内存空间(多申请两个空间是为了存放'.'和'\0')
	char *s=(char *)malloc(aloc+bloc+2);
	if(s==NULL)
	{
		printf("create fail!|n");
		exit(1);
	}
	char *t=s;
	while(aloc>0)
	{
		*t=a[aloc-1]+'0';
		aloc--;
		t++;
	}
	*t='.';
	t++;
	while(i<bloc)
	{
		*t=b[i]+'0';
		i++;
		t++;
	}
	*t='\0';
	return s;
}

int main()
{
	double d=123.456;
	char *s=convert(d);
	printf("%s\n",s);
	return 0;
}

当输入double d=123.456时,输出结果为123.456

当输入double d=123.4567时,输出结果和预期的不一样,不知道为什么会产生这个bug???????????? 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    C++检测字符串合法性的类(自创)

    自己写的一个类,实现对字符串的检测。 可以检查字符串是否满足某种指定的类型格式, 指定的类型格式包括整型数、浮点数、布尔型、有特殊要求的字符串等, 同时允许把字符串转换成相应的数据类型, 可用于对用户输入...

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    C语言FAQ 常见问题列表

    previous up contents next C 语言常见问题集 原著:Steve Summit 翻译:朱群英, 孙 云 修订版 0.9.4, 2005年6月23日... o 8.6 我有个函数, 本该返回一个字符串, 但当它返回调用者的时候, 返回串却是垃圾信息。 ...

    Perl 语言入门 第六版

    数字与字符串之间的自动转换 Perl的内置警告信息 标量变量 给变量取个好名字 标量的赋值 双目赋值操作符 用print输出结果 字符串中的标量变量内插 借助代码点创建字符 操作符的优先级与结合性 比较操作符 ...

    你必须知道的495个C语言问题(PDF)

    我们不知道a[] 的哪一个分量会被改写,但i 的确会增加1, 对吗? . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.9 ++i 和i++ 有什么区别? . . . . . . . . . . . . . . . . . . . . . . 15 3.10 如果我不...

    深入JAVA虚拟机(第2版)

    6.3 特殊字符串 6.3.1 全限定名 6.3.2 简单名称 6.3.3 描述符 6.4 常量池 6.4.1 CONSTANT_Utf8_info表 6.4.2 CONSTANT_Integer_info表 6.4.3 CONSTANT_Float_info表 6.4.4 CONSTANT_Long_...

    深入Java虚拟机

    6.3 特殊字符串 6.3.1 全限定名 6.3.2 简单名称 6.3.3 描述符 6.4 常量池 6.4.1 CONSTANT_Utf8_info表 6.4.2 CONSTANT_Integer_info表 6.4.3 CONSTANT_Float_info表 6.4.4 CONSTANT_Long_...

    深入java虚拟机第二版

    6.3 特殊字符串 6.3.1 全限定名 6.3.2 简单名称 6.3.3 描述符 6.4 常量池 6.4.1 CONSTANT_Utf8_info表 6.4.2 CONSTANT_Integer_info表 6.4.3 CONSTANT_Float_info表 6.4.4 CONSTANT_Long_info表 ...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    6.3 特殊字符串 6.3.1 全限定名 6.3.2 简单名称 6.3.3 描述符 6.4 常量池 6.4.1 constant_utf8_info表 6.4.2 constant_integer_info表 6.4.3 constant_float_info表 6.4.4 constant_long_...

    我整理的PHP 7.0主要新特性

    现在支持字符串(string)、整型(int)、浮点数(float)、及布尔型(bool)参数声明,以前只支持类名、接口、数组及Callable 两种风格:强制转换模式(默认)与严格模式 &lt;?php // Coercive mode function sumOfInts...

    突破程序员基本功的16课.part2

    5.1.2 不可变的字符串 5.1.3 字符串比较 5.2 表达式类型的陷阱 5.2.1 表达式类型的自动提升 5.2.2 复合赋值运算符的陷阱 5.3 输入法导致的陷阱 5.4 注释的字符必须合法 5.5 转义字符的陷阱 5.5.1 慎用字符...

    vc++ 开发实例源码包

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    MYSQL培训经典教程(共两部分) 2/2

    DATE和TIMESTAMP类型 230 1.3.3.3 TIME类型 233 1.3.3.4 YEAR类型 234 1.3.4 字符串类型 234 1.3.4.1 CHAR和VARCHAR类型 234 1.3.4.2 BLOB和TEXT类型 235 1.3.4.3 ENUM类型 236 1.3.4.4 SET...

    MYSQL培训经典教程(共两部分) 1/2

    DATE和TIMESTAMP类型 230 1.3.3.3 TIME类型 233 1.3.3.4 YEAR类型 234 1.3.4 字符串类型 234 1.3.4.1 CHAR和VARCHAR类型 234 1.3.4.2 BLOB和TEXT类型 235 1.3.4.3 ENUM类型 236 1.3.4.4 SET...

Global site tag (gtag.js) - Google Analytics