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

2024-12-13 01:51:56
推荐回答(5个)
回答1:

#include 
#include 

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

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

回答2:

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

回答3:

是以整型的位数为限的,输入位数太长了不行。
//#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);
}

回答4:

直接采用sprintf(str, "%f", ...)则可。

回答5:

那个~~北京泗洪人 真厉害,我也收藏了,看看源代码