#include<stdio.h>
#include<string.h>
int Inttochar(int _nChar, char* _szInt);
void Doubletochar(double dChar, char* szInt);
int main(int argc, char* argv[])
{
//定义数组大小
const int nSize = 20;
//定义double变量和字符串
double dChar = 0;
char szDouble[nSize] = "";
//提示输入double 变量
printf("Please input a double: ");
scanf("%lf", &dChar);
//如果变量dChar小于零,先取负号,后做转换
if(dChar<0)
{
dChar = -dChar;
szDouble[0] = '-';
Doubletochar(dChar, szDouble+1);
}
//如果dChar非负,直接转换
else
{
Doubletochar(dChar, szDouble);
}
//打印结果
puts(szDouble);
return 0;
}
//定义函数,把非负的double转化成字符串
void Doubletochar(double dChar, char* szDouble)
{
unsigned long nChar = 0;
int nE = 0;
char szDecimal[7] = "";
int nDecimal = 0;
//取double的整数部分
nChar = (unsigned long)dChar;
//把整数部分转换成字符串,最后一个字符的下标赋值给nE
nE = Inttochar(nChar, szDouble);
//在字符串数组中写下小数点
szDouble[nE + 1] = '.';
//把小数部分转成整数
nChar = (dChar - nChar)*1000000;
//在szDouble数组中,把小数点后6位清成'0'
memset(szDouble+nE+2, '0', 6);
//把小数部分转换成字符串,保存到字符数组szDecimal
nDecimal = Inttochar(nChar, szDecimal);
//把小数部分拷贝到szDouble的小数点后(注意,起始位置是小数点后第一个非零位)
strcpy(szDouble+nE+7-nDecimal, szDecimal);
return;
}
//定义函数,把整型数转化成倒序的整数字符串
int Inttochar(int _nChar, char* _szInt)
{
//定义整数型的数组
int _arrInt[20] = {0};
//定义整数的位数
int _nE = 0;
//定义交换变量
int _tmp = 0;
if(_nChar < 10)
{
_szInt[0] = _nChar +48;
_nE = 0;
}
else
{
for(int i=0; i<20; i++)
{
//逐个求余并赋值给数组元素
_arrInt[i] = _nChar%10;
//将整型转换成字符型
_szInt[i] = _arrInt[i] + 48;
//逐个取整
_nChar /= 10;
//最后一位直接赋值给下一数组元素并转成字符
if(_nChar<10)
{
_arrInt[i+1]=_nChar;
_szInt[i+1] = _arrInt[i+1] + 48;
break;
}
}
//记下位数
_nE=i+1;
}
for(int i=0; i<(_nE+1)/2; i++)
{
_tmp = _szInt[i];
_szInt[i] = _szInt[_nE-i];
_szInt[_nE-i] = _tmp;
}
return _nE;
}