将float转换为char *

时间:2010-06-07 10:44:41

标签: c floating-point floating-point-conversion

如何使用float语言将char*值转换为C

7 个答案:

答案 0 :(得分:30)

char buffer[64];
int ret = snprintf(buffer, sizeof buffer, "%f", myFloat);

if (ret < 0) {
    return EXIT_FAILURE;
}
if (ret >= sizeof buffer) {
    /* Result was truncated - resize the buffer and retry.
}

这会将myFloat的字符串表示存储在myCharPointer中。但要确保字符串足够大以容纳它。

snprintf是一个比sprintf更好的选择,因为它保证它永远不会超过你在参数2中提供的缓冲区的大小。

答案 1 :(得分:8)

char array[10];
sprintf(array, "%f", 3.123);

sprintf :(来自MSDN)

答案 2 :(得分:5)

在Arduino:

//temporarily holds data from vals
char charVal[10];                

//4 is mininum width, 3 is precision; float value is copied onto buff
dtostrf(123.234, 4, 3, charVal);

monitor.print("charVal: ");
monitor.println(charVal);

答案 3 :(得分:2)

char* str=NULL;
int len = asprintf(&str, "%g", float_var);
if (len == -1)
  fprintf(stderr, "Error converting float: %m\n");
else
  printf("float is %s\n", str);
free(str);

答案 4 :(得分:2)

接受答复后很久。

使用sprintf()或相关功能,因为许多人都有建议的答案,但使用更好的格式说明符。

使用"%.*e",代码解决了各种问题:

  • 所需的最大缓冲区大小更合理,例如18. sprintf(buf, "%f", FLT_MAX);可能需要47+。 sprintf(buf, "%f", DBL_MAX);可能需要317 +

  • 使用".*"允许代码定义区分字符串版本float x和下一个最高float所需的小数位数。对于deatils,请参阅Printf width specifier to maintain precision of floating-point value

  • 使用"%e"可以让代码区分小float个而不是"0.000000"所有打印|x| < 0.0000005

    #define FLT_STRING_SIZE (1+1+1+(FLT_DECIMAL_DIG-1)+1+1+ 4   +1)
                         //  - d .  dddddddd           e - dddd \0
    
    char buf[FLT_STRING_SIZE];
    sprintf(buf, "%.*e", FLT_DECIMAL_DIG-1, some_float);
    

思路:
IMO,最好使用2x缓冲区大小的挡板,如buf[FLT_STRING_SIZE*2] 为了增强稳健性,请使用snprintf()

答案 5 :(得分:2)

typedef union{
    float a;
    char b[4];
} my_union_t;

您可以逐字节访问浮点数据值,并通过8位输出缓冲区(例如USART)发送而不进行转换。

答案 6 :(得分:0)

char array[10];
snprintf(array, sizeof(array), "%f", 3.333333);