• ベストアンサー

fprintfで微小な数値を書き込む場合??

fprintf( fp, "%10.20f, %2.20f, %2.20f\n", b,c,d); としてb,c,dの値を書きこもうとしました。 しかし、c,dの値が小さくて0になってしまいました。 どのように改善すればいいのですか?分かる方がいたら教えていただけないでしょうか? よろしくお願いします。 ちなみにc,dの値は0.000000023などです。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.5

ご質問がすべて正しいとすると、コンパイラや実行環境が そういう仕様なのでは? OSやコンパイラには何をお使いでしょうか? ちなみに手元のCentos5.5+gcc4.1.2では正常に動作するようです。 [localhost tmp]$ cat test.c #include <stdio.h> int main(int argc, const char *argv[]) { float b,c,d; FILE *fp = fopen("output.txt", "w"); b = c = d = 0.000000023f; fprintf(fp, "%10.20f, %2.20f, %2.20f\n", b,c,d); fclose(fp); } [localhost tmp]$ ./test [localhost tmp]$ cat output.txt 0.00000002300000012667, 0.00000002300000012667, 0.00000002300000012667

saterain20
質問者

お礼

OSはウインドウスXPです。 コンパイラーはVISUALSTUDIOのコマンドプロンプトです。

その他の回答 (4)

  • axel_eye
  • ベストアンサー率64% (145/226)
回答No.4

floatで宣言しているからではないでしょうか? doubleで宣言したら表示されませんか? 有効数字の桁数が足りないような気がします。 間違ってたらすみません。

saterain20
質問者

お礼

ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

e でも g でも使えばいいだけでは?

saterain20
質問者

お礼

なるほど。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

これだけ見ると、特に0になる要因はありません。 フォーマットfで 10.20 / 2.20 と指定してあります。 前の数字は表示する最小の桁数(この「最小」が重要です。指定した桁で足りなければ、その分桁を増やします) 数点の後は、小数点以下に表示する桁数です。 %10.20fでは、小数点以下20桁、全体で最低10桁で表示する(実際には、小数点以下20桁+小数点+最低1桁の22桁以上になる) なので、 > c,dの値は0.000000023 が本当なら、0にはなりません。 ・値はどうやって確認したのでしょうか? 頭で考えたものなら、実際の計算とのずれがこかにあります。デバッガを使うとか、あちらこちらで%gで表示(%gは値によって指数表記になるので、%fで精度が足りない、などということはおきない)させるとかして、計算の流れを確認しましょう。 途中で整数同士のワリザンとか入ってませんか?

saterain20
質問者

お礼

ありがとうございます。

  • mindatg
  • ベストアンサー率48% (110/227)
回答No.1

Cなんざ数年触ってませんし、確認もしてませんが記述がおかしいと思います 「%2.20f」の場合、小数箇所が20桁ですが、全体が2桁しかありません。 %全体桁数.少数桁数f と記述してみてください。 例えば、0.0000000231111・・・を「0.000000023」と表示させたい場合は 少数、9桁 小数点、1桁 整数、1桁(なくてもいいが) で、%10.9f とすれば良いと思います。

saterain20
質問者

お礼

ありがとうございました

関連するQ&A