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

[复制链接]
3322|16
手机看帖
扫描二维码
随时随地手机跟帖
東南博士| | 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 | 显示全部楼层
给你一段代码看看
float转换为字符串
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <math.h>
using namespace std;
char ch[20];
int cnt = 0;

int split_int(int num)
{
    int temp1,temp2;
    char ch1[6];
    int i=0;

    while(num%10)
    {
           temp1 = num%10;
           ch1[i] = temp1+'0';
           i++;
           num=num/10;
    }
    for(int k=i-1;k>=0;k--)
    {
      ch[cnt++] = ch1[k];
    }
    return 1;

}

bool float_to_str(float num)
{
     int temp=(int)num,tmp;
     int previout;
     int temp1 = temp;
     int temp2 = temp;
     int i = 0, j = 0;
     ch[cnt++]='.';
     while(temp != 0)
     {
         previout = (int)num;
         num *= 10;
         temp=(int)num;
       //  cout<<(int)num<<endl;
         temp = temp-(previout*(int)pow(10,1));
         ch[cnt++] = temp+'0';
         if((j > 5) || (temp < 0))
         {
            break;
         }
         j++;
     }
     ch[cnt-1] = '\0';
     return true;
}

int main(void)
{
    float num = 74.77;

/*
    ostringstream oss;//创建一个流

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

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

    cout<<result<<endl;*/

    split_int(int(num));
    float_to_str(num);
    cout<<ch<<endl;
    return 0;
}


/*
#include <stdio.h>

int main(void)
{
    char ch[12];
    int i;
    sprintf(i,"%f",2.21f);
    printf("%s\n",ch);
    return 0;
}*/

使用特权

评论回复
lt1231| | 2017-3-31 21:23 | 显示全部楼层
sprintf有个不好的地方,需要调用c的标准库,我试过在IAR的环境下,编译出来的会比较大。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

100

帖子

0

粉丝