如何可以将float类型的数据转换为字符串呢

[复制链接]
4028|16
 楼主| jermy_z 发表于 2017-3-28 22:45 | 显示全部楼层 |阅读模式
如何可以将float类型的数据转换为字符串呢
東南博士 发表于 2017-3-29 13:47 | 显示全部楼层
使用sprintf 规格化一下即可!

或者你直接printf 打印输出就可以啊!
wangjiahao88 发表于 2017-3-29 13:59 | 显示全部楼层
sprintf()函数的用法

函数功能:把格式化的数据写入某个字符串
函数原型:int sprintf( char *buffer, const char *format [, argument] … );
返回值:字符串长度(strlen)
wangjiahao88 发表于 2017-3-29 14:00 | 显示全部楼层
例子:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "  这字符串写到s中

sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"
wangjiahao88 发表于 2017-3-29 14:00 | 显示全部楼层
参数说明及应用举例
  sprintf格式的规格如下所示。[]中的部分是可选的。
  %[指定参数][标识符][宽度][.精度]指示符
  若想输出`%'本身时, 请这样`%%'处理。
  1. 处理字符方向。负号时表示从后向前处理。
  2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
  3. 字符总宽度。为最小宽度。
  4. 精确度。指在小数点后的浮点数位数。
wangjiahao88 发表于 2017-3-29 14:01 | 显示全部楼层
转换字符
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  %% 印出百分比符号,不转换。
  %c 整数转成对应的 ASCII 字元。
  %d 整数转成十进位。
  %f 倍精确度数字转成浮点数。
  %o 整数转成八进位。
  %s 整数转成字符串。
  %x 整数转成小写十六进位。
  %X 整数转成大写十六进位。
wangjiahao88 发表于 2017-3-29 14:01 | 显示全部楼层
$money = 123.1
  $formatted = sprintf (".2f", $money); // 此时变数 $ formatted 值为 "123.10"
  $formatted = sprintf (".2f", $money); // 此时变数 $ formatted 值为 "00123.10"
  $formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"
  $formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比
几时再见 发表于 2017-3-29 14:38 | 显示全部楼层
c语言格式化字符串函数,一下子就搞定了
罗勋义 发表于 2017-3-29 14:44 | 显示全部楼层
楼主用的什么语言呢
花落辞殇 发表于 2017-3-30 07:36 | 显示全部楼层
对于int型,可以调用函数itoa。
char*itoa(int value,char*string,int radix);
功能为将任意类型的数字转换为字符串。
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。
花落辞殇 发表于 2017-3-30 07:38 | 显示全部楼层
罗勋义 发表于 2017-3-29 14:44
楼主用的什么语言呢

在21ic问的,估计都是c语言了吧
会飞的大白 发表于 2017-3-30 07:50 | 显示全部楼层
float和double类型没有特定的转换函数。
不过不论是float, double还是int,都可以通过sprintf函数进行转换。
墙上的咖啡 发表于 2017-3-30 20:59 | 显示全部楼层

小端存储
float 转成HEX字符串
float y=0.1111111119389534f;
char a[9];
unsigned char *p;
p=(unsigned char *)(&y);
sprintf(a,"%02X%02X%02X%02X",p[0],p[1],p[2],p[3]);
nobleliom 发表于 2017-3-30 21:11 | 显示全部楼层
c#中的语句
float转换string
string s = "3.14";
float x = float.Parse(s);
大白农 发表于 2017-3-31 09:04 | 显示全部楼层
大端存储
float 转成HEX字符串
float y=0.1111111119389534f;
char a[9];
unsigned char *p;
p=(unsigned char *)(&y);
sprintf(a,"%02X%02X%02X%02X",p[3],p[2],p[1],p[0]);
hello牟 发表于 2017-3-31 09:57 | 显示全部楼层
给你一段代码看看
  1. float转换为字符串
  2. #include <iostream>
  3. #include <sstream>
  4. #include <stdio.h>
  5. #include <math.h>
  6. using namespace std;
  7. char ch[20];
  8. int cnt = 0;

  9. int split_int(int num)
  10. {
  11.     int temp1,temp2;
  12.     char ch1[6];
  13.     int i=0;

  14.     while(num%10)
  15.     {
  16.            temp1 = num%10;
  17.            ch1[i] = temp1+'0';
  18.            i++;
  19.            num=num/10;
  20.     }
  21.     for(int k=i-1;k>=0;k--)
  22.     {
  23.       ch[cnt++] = ch1[k];
  24.     }
  25.     return 1;

  26. }

  27. bool float_to_str(float num)
  28. {
  29.      int temp=(int)num,tmp;
  30.      int previout;
  31.      int temp1 = temp;
  32.      int temp2 = temp;
  33.      int i = 0, j = 0;
  34.      ch[cnt++]='.';
  35.      while(temp != 0)
  36.      {
  37.          previout = (int)num;
  38.          num *= 10;
  39.          temp=(int)num;
  40.        //  cout<<(int)num<<endl;
  41.          temp = temp-(previout*(int)pow(10,1));
  42.          ch[cnt++] = temp+'0';
  43.          if((j > 5) || (temp < 0))
  44.          {
  45.             break;
  46.          }
  47.          j++;
  48.      }
  49.      ch[cnt-1] = '\0';
  50.      return true;
  51. }

  52. int main(void)
  53. {
  54.     float num = 74.77;

  55. /*
  56.     ostringstream oss;//创建一个流

  57.     oss<<num;//把值传递如流中

  58.     string result=oss.str();//获取转换后的字符转并将其写入result

  59.     cout<<result<<endl;*/

  60.     split_int(int(num));
  61.     float_to_str(num);
  62.     cout<<ch<<endl;
  63.     return 0;
  64. }


  65. /*
  66. #include <stdio.h>

  67. int main(void)
  68. {
  69.     char ch[12];
  70.     int i;
  71.     sprintf(i,"%f",2.21f);
  72.     printf("%s\n",ch);
  73.     return 0;
  74. }*/
lt1231 发表于 2017-3-31 21:23 | 显示全部楼层
sprintf有个不好的地方,需要调用c的标准库,我试过在IAR的环境下,编译出来的会比较大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

100

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部