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

将一个浮点数转换为字符串(有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????????????