3

私は文字列を持っており、そのtemp[256]中に などの二重数があり0.125、すべてがうまくいっていますが、 のよう0.888888888888888888888888888888888888888883に二重数には大きすぎる数値を取得する場合があり、二重数は の代わりに7つの数値のようにしか保持されません全て。

文字列を double に変換するために を使用してきましたがatof、すべての数値に十分なスペースがないため、問題は double にあると思います....これは私が書いたものです:

char temp[256]; // Has the number inside it
double temp_num = 0; // need to put the string inside this variable
temp_num = atof(temp);
printf ("%f\n", temp_num);

数字がゼロの後の7桁より大きくない限り、印刷からの出力は問題ありませんが、の0.8815818188888888888888888888888888888888888888888143ような数字の場合、最初の7桁のみが印刷されます。この例では8815818、代わりに印刷されます整数...だから、もっと大きな変数が必要だと思いますか?

4

2 に答える 2

2

Printf には、double または float を処理するときにゼロの後に 7 桁のみを出力するというデフォルトの動作がありますが、その動作を変更して、ゼロの後に何個の数値を出力するかを制御できます。

printf ("%.20f\n", temp_num);

ここでは、ゼロの後に 20 桁が表示されます。

詳細については、以下を参照してください。

  1. http://www.cplusplus.com/reference/clibrary/cstdio/printf/
  2. C プログラミング言語の第 2 版。
于 2012-06-16T07:37:13.360 に答える
1

2 つの問題:

1) 私は "atof()" よりも"sscanf()"を好みます: 変換エラー (つまり、不正な数値) をチェックできます。

2)すでに辛口 に述べたように、浮動小数点値を「フォーマット」できます-「フォーマット文字列」で#/数字などを制限します。

于 2012-06-16T07:38:47.550 に答える