プロが教える店舗&オフィスのセキュリティ対策術

書式指定子の%eで、8文字までで出力しなければなりません。

printf("data = %8.3e\n",data);

仮にdataが6.456e5の場合、
data = 6.456e+005 (既に10文字でオーバー)


となってしまい、指数部の桁数が3桁になってしまうと
有効数字部分が少なくなってしまうので、
指数部を、1桁にする方法はあるのでしょうか?

こんな感じで出力できるでしょうか?
data = 6.456e+5

A 回答 (3件)

★アドバイス


・一度バッファに『%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 );
以上。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/05 14:11

正攻法でいくなら、



double data = 6.456e5;
int e = (int)log10(fabs(data));
printf("%.3fe%d\n", data / pow(10,e), e);

ですかね。
    • good
    • 1
この回答へのお礼

ご教示ありがとうございます。
指数部のみを取り出して表示する方法
例文を示して頂いたので非常に良く分かりました。

%e使用時の書式指定子のオプションで対応可能なのかと
予想していたのですが、ないのですね。

どうもありがとうございました。

お礼日時:2008/02/04 13:16

ランタイム依存みたいですよ


VC2005の場合 _set_output_format()で 2桁、3桁の制御は出来るようです
    • good
    • 0
この回答へのお礼

ご教示ありがとうございました。
MSDNの下記ページで確認できました。

http://msdn2.microsoft.com/ja-jp/library/0fatw23 …

ただ、やはり2桁までしか圧縮できないようです。
2桁が許容できる場合は、すっきりしているので、
こちらを利用したいと思います。

どうもありがとうございました。

お礼日時:2008/02/05 14:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!