c语言求一个float转换为字符串的函数,包括符号,小数

c语言求一个float转换为字符串的函数,包括符号,小数,不可以使用库函数

#include <stdio.h>
#include <string.h>

void reverse(char *str, int n) {
    int p = 0, q = n-1;
    char t;
    while (p < q) {
        t = str[p];
        str[p] = str[q];
        str[q] = t;
        p++;
        q--;
    }
}

void f2s(float f, char* str) {
    int i = 0;
    int n = (int)f;
    f -= n;
    while (n > 0) {
        str[i++] = n % 10 + '0';
        n /= 10;
    }
    reverse(str, i);
    str[i++] = '.';
    n = 0;
    while (f > 0 && n < 6) {
        int t = (int)(f * 10);
        str[i++] = t + '0';
        f = f * 10 - t;
        n++;
    }
    str[i] = '\0';
}

int main() {
    float f = 234.123;
    char str[100];
    f2s(f, str);
    printf("%f\n", f);
    printf("%s\n", str);
    return 0;
}

这个也不是最好的方法,勉强能用吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-15
 unsigned char string[50];          // 返回定义的字符串
 void Floattostr(float a,unsigned int bb) // a: 需要转换的float,bb:转换的小数点位数
 {       long k;
        int  i,sig,j,l;      // sig 浮点数符号
        long m,n;               // m   浮点数的整数部分,n浮点数小数部分。
        unsigned char *strz,*strx;// 临时变量。
        for(i=0;i<50;i++)
        string[i] = '\0' ;
        sig = 1;            // 默认是正数
        k   = 1;           //
        j   = 0;
        m   = (long)(a);    // 对a取整。
        if(m < 0)  { sig = -1;string[j++] = 0x2D; }    // 符号

        for(i = 0;i < bb;i++)  k *= 10;
        n   = (long)((a - (float)m)*(float)k +sig * 0.5); // 取小数部分?
         n *= sig;
         m *= sig;     // 取绝对值 
        for(i =0,strz[0] =0x30; m != 0L; m/= 10)
        {
            strz[i++] = (unsigned char)(((((unsigned char)(m%10))&0x0F)<0x0A ?(((unsigned char)(m%10))&0x0F):0)|0x30);  // 整数
        }

        for(k = 0, strx[0] = 0x30 ; k <= bb ; n /=10 )
        {
            strx[k++] = (unsigned char)(((((unsigned char)(n%10))&0x0F)<0x0A ?(((unsigned char)(n%10))&0x0F):0)|0x30); // 小数
        }

      for(l=i-1;l>=0;l--)  string[j++] = strz[l];

     if(bb != 0)
     { 
       string[j++]=0x2E;
       for(k--; k >0;)
       string[j++] = strx[--k];}
 }

追问

不好用呀,转换后无结果

追答main()

int i; 
  float a[5]={-26.362,-213.18927,5,-2,2.1};
  for(i=0;i<5;i++)
  {
     Floattostr(a[i],5) ;
     puts(string);
     putch('\n');
  }
  getch();
}

它只是个函数调用

在win-TC中可以运行。自己看懂思路就行,就是把float'

拆分成了四部分:1:符号位,2:整数部分3:小数点,4小数点部分。唯一麻烦的就是小数部分的判断,tc语言中的小数点部分后面不干净,vc运行可能好点。

第2个回答  推荐于2016-06-08
是以整型的位数为限的,输入位数太长了不行。
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"//
void main(void){
double rn=9876.5678;
int i=1000000000,k,pt=1,n;
char a[12]="";
printf("Enter a floating point number...\nrn=");
//scanf("%lf",&rn); //手工输入时把这一行开放.
while((rn/=10)>1.0) pt++;
n=(int)(rn*i);
while(!(n%10)){
n/=10;
i/=10;
}
for(k=0,i/=10;i>=1;i/=10){
a[k++]=n/i+'0';
n%=i;
if(k==pt) a[k++]='.';
}
printf("%s\n",a);
}本回答被网友采纳
第3个回答  2013-11-15
直接采用sprintf(str, "%f", ...)则可。追问

不可以使用库函数

不能直接使用里面的,会报错,望整理出一个来

第4个回答  2013-11-15
那个~~北京泗洪人 真厉害,我也收藏了,看看源代码

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网