• ベストアンサー

printfの%eで指数部分の桁数を調整する方法?

書式指定子の%eで、8文字までで出力しなければなりません。 printf("data = %8.3e\n",data); 仮にdataが6.456e5の場合、 data = 6.456e+005 (既に10文字でオーバー) となってしまい、指数部の桁数が3桁になってしまうと 有効数字部分が少なくなってしまうので、 指数部を、1桁にする方法はあるのでしょうか? こんな感じで出力できるでしょうか? data = 6.456e+5

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・一度バッファに『%5.3e』として出力して下さい。  そのバッファ(文字列)から指数部のゼロ2桁を削除すれば8文字になりませんか。 サンプル: double data = 6.456e+5; char buff[ 16 ]; sprintf( buff, "%5.3e", data ); // buff=『6.456e+005』 buff[ 7 ] = buff[ 9 ]; buff[ 8 ] = '\0'; printf( "data = %s\n", buff ); 以上。

yyamada10
質問者

お礼

文字列を操作するのですね。 非常に良く分かりました。 どうもありがとうございました。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

正攻法でいくなら、 double data = 6.456e5; int e = (int)log10(fabs(data)); printf("%.3fe%d\n", data / pow(10,e), e); ですかね。

yyamada10
質問者

お礼

ご教示ありがとうございます。 指数部のみを取り出して表示する方法 例文を示して頂いたので非常に良く分かりました。 %e使用時の書式指定子のオプションで対応可能なのかと 予想していたのですが、ないのですね。 どうもありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

ランタイム依存みたいですよ VC2005の場合 _set_output_format()で 2桁、3桁の制御は出来るようです

yyamada10
質問者

お礼

ご教示ありがとうございました。 MSDNの下記ページで確認できました。 http://msdn2.microsoft.com/ja-jp/library/0fatw238(VS.80).aspx ただ、やはり2桁までしか圧縮できないようです。 2桁が許容できる場合は、すっきりしているので、 こちらを利用したいと思います。 どうもありがとうございました。

関連するQ&A

専門家に質問してみよう