23

float値をchar*言語Cに変換するにはどうすればよいですか?

4

7 に答える 7

40
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ます。ただし、ストリングがそれを保持するのに十分な大きさであることを確認してください。

snprintfsprintf引数2で指定したバッファのサイズを超えて書き込まれないことを保証するよりも優れたオプションです。

于 2010-06-07T10:47:20.777 に答える
11
char array[10];
sprintf(array, "%f", 3.123);

sprintf:(MSDNから)

于 2010-06-07T10:46:12.637 に答える
11

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);
于 2015-02-03T17:20:40.447 に答える
7

答えを受け入れてからずっと後。

sprintf()他の多くの人が答えを提案しているので、または関連する関数を使用しますが、より適切なフォーマット指定子を使用します。

を使用して"%.*e"、コードはさまざまな問題を解決します。

  • 必要な最大バッファサイズは、18のようにはるかに合理的ですfloat(以下を参照)。"%f"で、 47以上sprintf(buf, "%f", FLT_MAX);が必要になる可能性があります。sprintf(buf, "%f", DBL_MAX);317+が必要な場合がありますchar

  • を使用すると、コードで、の文字列バージョンと次に高い".*"バージョンを区別するために必要な小数点以下の桁数を定義できます。詳細については、浮動小数点値の精度を維持するためのPrintf幅指定子を参照してください。float xfloat

  • を使用"%e"すると、コードは、の場合の結果であるfloatすべての印刷ではなく、小さいsを互いに区別できます。"0.000000"|x| < 0.0000005

使用例

#include <float.h>
#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、のようなスクラッチパッドには2倍のバッファサイズを使用することをお勧めしますbuf[FLT_STRING_SIZE*2]
堅牢性を高めるには、を使用しますsnprintf()


2番目の代替案として"%.*g"。これは"%f"、指数関数的に1.0に近い値の場合や、他の値の場合と同様"%e"です。

于 2015-02-03T19:23:59.800 に答える
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);
于 2010-06-07T10:51:34.917 に答える
2
typedef union{
    float a;
    char b[4];
} my_union_t;

バイトごとにfloatデータ値にアクセスし、キャストせずに8ビット出力バッファー(USARTなど)を介して送信できます。

于 2015-02-12T06:18:13.530 に答える
0
char array[10];
snprintf(array, sizeof(array), "%f", 3.333333);
于 2010-06-07T13:02:01.040 に答える