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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

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

参考技术A  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运行可能好点。

参考技术B 是以整型的位数为限的,输入位数太长了不行。
//#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);
参考技术C 直接采用sprintf(str, "%f", ...)则可。追问

不可以使用库函数

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

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

求c语言将十进制数转换为16进制的函数

函数声明为char* inttohex(int aa);形参为任意十进制数(2位数以内),调用函数后,得到转换后的16进制数,字符串类型

c语言将十进制数转换为16进制的函数:

#include<stdio.h>

main()

int u10;
char u16[10];
int w=0,a,b,i;

printf("请输入一个数字-->");
scanf("%d",&u10);
if(u10==0)

u16[0]='0';
w++;

else

a=u10;
while(a)

b=a%16;
if(b<10)

u16[w]='0'+b;

else

u16[w]='A'+b-10;

a=a/16;
w++;


printf("\\n");
printf("%d(10)转换为16进制数字为:",u10);
for(i=w-1;i>=0;i--)

printf("%c",u16[i]);

printf("\\n");

扩展资料:

十进制数转换为二进制数方法

十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。

1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

2.十进制小数转换为二进制小数

十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

参考资料:

百度百科-十进制

参考技术A

1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。

2、具体实现方法可以参考如下程序:

#include <stdio.h>

void main()

int he;    

int re=0;   // 保存转换为10进制的结果

int k=16;   // 16进制

int n=1;    // 位权

scanf("%d", &he);  // 接收用户输入的16进制数,不含0x前缀

while(he != 0)  

re += (he%10)*n;  // 取出各位位码值,并乘以对应的位权值

he /= 10;   // 去掉16进制数的最低位,次低位变为最低位

n *= k;     // 位权乘以16 

printf("%d",re); // 输出转换后的结果

扩展资料:

十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。

利用系统函数有:

char *  itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。

所以代码可以为:char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度char * inttohex(int aa)itoa (aa, buffer, 16);return (buffer);

sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。

所以代码可以为:char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度char * inttohex(int aa)sprintf(buffer, "%x", aa);return (buffer);

参考资料:百度百科 十六进制转换_

参考技术B

1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。

2、具体实现方法可以参考如下程序:

#include <stdio.h>

void main()

int he;    

int re=0;   // 保存转换为10进制的结果

int k=16;   // 16进制

int n=1;    // 位权

scanf("%d", &he);  // 接收用户输入的16进制数,不含0x前缀

while(he != 0)  

re += (he%10)*n;  // 取出各位位码值,并乘以对应的位权值

he /= 10;   // 去掉16进制数的最低位,次低位变为最低位

n *= k;     // 位权乘以16 

printf("%d",re); // 输出转换后的结果

扩展资料

int sw1016(unsigned int a,char *p)

unsigned int mask=0x80000000;

int t=0;

int k=0;

int sum=0;

int c=2;

*(p+0)='0';

*(p+1)='X';

*(p+10)='\\0';

for(k=0;k<8;k++)

for(t=0;t<4;t++)

if((a&mask)==mask)

sum=sum*2+1;

else

sum=sum*2+0;

a=a<<1; 

if(sum<10)

p[c]=sum+'0';

else

p[c]='a'+sum-10;

sum=0;

c++;

return 0; 

 

int main()

  

unsigned int in=486256;

char p[11];

sw1016(in,p);

printf("xen:%s",p);

参考资料:百度百科 十六进制至十进制转换



参考技术C

基本全部情况都考虑了,所以有点长,请耐心看完。代码可以直接拷贝试验,都已调试过,保证正确!


有3种方式实现,其中两种是使用系统函数,另一种是直接自己编写。

使用系统函数实现要加入#include <stdlib.h>,自己编写则不需要这个头文件。

下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。


利用系统函数有

1. char *  itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)

    itoa (aa, buffer, 16);
    return (buffer);

2. sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)

    sprintf(buffer, "%x", aa);
    return (buffer);

3. 自己编写

如果参数只要两位数的整数,那么很简单。代码如下:

char buffer [3]; //用于存放转换好的十六进制字符串。由于只要支持2位整数,所以长度3即可

char * inttohex(int aa)

    if (aa / 16 < 10)   //计算十位,并转换成字符 
        buffer[0] = aa / 16 + '0';
    else
        buffer[0] = aa / 16 - 10 + 'A';
    if (aa % 16 < 10)   //计算个位,并转换成字符
        buffer[1] = aa % 16 + '0';
    else
        buffer[1] = aa % 16 - 10 + 'A';
    buffer[2] = '\\0';   //字符串结束标志
    return (buffer);

如果参数是任意整数,由于计算方法是每次都除以16和对16取余数,余数以倒序的顺序排列就是结果,所以最佳方法是用递归函数(当然循环也可以,但需要最后再进行倒序)。递归代码如下:

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)

    static int i = 0;
    if (aa < 16)            //递归结束条件 
    
        if (aa < 10)        //当前数转换成字符放入字符串 
            buffer[i] = aa + '0';
        else
            buffer[i] = aa - 10 + 'A';
        buffer[i+1] = '\\0'; //字符串结束标志 
    
else
    
        inttohex(aa / 16);  //递归调用 
        i++;                //字符串索引+1 
        aa %= 16;           //计算当前值
        if (aa < 10)        //当前数转换成字符放入字符串 
            buffer[i] = aa + '0';
        else
            buffer[i] = aa - 10 + 'A';
    
    return (buffer);


最后测试代码如下(以sprintf为例,其余只要替换inttohex函数中的代码内容即可):

#include <stdio.h>
#include <stdlib.h>

char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度

char * inttohex(int aa)

    sprintf(buffer, "%x", aa);
    return (buffer);


int main ()

  int num;
  char * hex_str;
  printf ("Enter a number: ");
  scanf ("%d",&num);
  hex_str = inttohex (num);
  printf ("Hexadecimal number: %sH\\n", hex_str);
  return 0;

 可以直接拷贝试验,都已调试过,保证正确!

本回答被提问者采纳
参考技术D int i;
scanf ("%d",&i);
printf ("%x",i);追问

你确定看懂我的意思了?我要的是在其他地方调用这个函数,得到一个16进制返回值。

以上是关于c语言求一个float转换为字符串的函数,包括符号,小数的主要内容,如果未能解决你的问题,请参考以下文章

c语言里如何将float转换成string

c语言中如何将short,int,long,float这些类型的数值转换为字符串?

c语言中如何将short,int,long,float这些类型的数值转换为字符串?

请问C语言中如何将int转换为float

求大神整理c语言指令符号及用法大全。

c语言里怎么把float转换为char型?