Converting float to char*

后端 未结 7 753
野性不改
野性不改 2021-02-04 01:54

How can I convert a float value to char* in C language?

相关标签:
7条回答
  • 2021-02-04 02:32
    typedef union{
        float a;
        char b[4];
    } my_union_t;
    

    You can access to float data value byte by byte and send it through 8-bit output buffer (e.g. USART) without casting.

    0 讨论(0)
  • 2021-02-04 02:33

    Long after accept answer.

    Use sprintf(), or related functions, as many others have answers suggested, but use a better format specifier.

    Using "%.*e", code solves various issues:

    • The maximum buffer size needed is far more reasonable, like 18 for float (see below). With "%f", sprintf(buf, "%f", FLT_MAX); could need 47+. sprintf(buf, "%f", DBL_MAX); may need 317+

    • Using ".*" allows code to define the number of decimal places needed to distinguish a string version of float x and it next highest float. For deatils, see Printf width specifier to maintain precision of floating-point value

    • Using "%e" allows code to distinguish small floats from each other rather than all printing "0.000000" which is the result when |x| < 0.0000005.

    Example usage

    #include <float.h>
    #define FLT_STRING_SIZE (1+1+1+(FLT_DECIMAL_DIG-1)+1+1+ 4   +1)
                         //  - d .  ffffdffffffffd           e - ffffdd \0
    
    char buf[FLT_STRING_SIZE];
    sprintf(buf, "%.*e", FLT_DECIMAL_DIG-1, some_float);
    

    Ideas:
    IMO, better to use 2x buffer size for scratch pads like buf[FLT_STRING_SIZE*2].
    For added robustness, use snprintf().


    As a 2nd alterative consider "%.*g". It is like "%f" for values exponentially near 1.0 and like "%e" for others.

    0 讨论(0)
  • 2021-02-04 02:38
    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.
    }
    

    That will store the string representation of myFloat in myCharPointer. Make sure that the string is large enough to hold it, though.

    snprintf is a better option than sprintf as it guarantees it will never write past the size of the buffer you supply in argument 2.

    0 讨论(0)
  • 2021-02-04 02:39
    char array[10];
    snprintf(array, sizeof(array), "%f", 3.333333);
    
    0 讨论(0)
  • 2021-02-04 02:47
    char array[10];
    sprintf(array, "%f", 3.123);
    

    sprintf: (from MSDN)

    0 讨论(0)
  • 2021-02-04 02:50
    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);
    
    0 讨论(0)
提交回复
热议问题