自定义 ftoa 与 itoa

#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值