人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C++について質問です。

printf("%.3f",x);とすれば小数点いかの桁数を指定できるのは知っています。
そこで、「3」の部分を「n」などの変数に変えて、精度を変えれるようにしたいのですが、可能でしょうか?
また、可能ならばどのようにすればいいのでしょうか。

これではうまくいきませんが、やりたい事のイメージです。

printf("%.nf",x);


分かる方、お願いします。

●質問者: 半月
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

フィールド幅に、アスタリスクを使います。
man printf の「フィールド幅」のところを参照。

最小のフィールド幅を指定する 10進数の数値文字列 (文字列の最初の文字は ゼロ以外)。本項目はオプションである。 変換された値の文字数がフィールド長よりも少ない場合、 フィールドの左側をスペースで埋める (左揃えのフラグがある場合は右側を埋める)。 10進数の文字列の代わりに "*" や "*m$" (m は 10進整数) を書くこともできる。 "*" と "*m$" はそれぞれ、次の引き数と m 番目の引き数をフィールド幅として 使うことを指定する (これらの引き数は int 型でなければならない)。

http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/printf.3.html

ソースがあった方が分かりやすいでしょうか。

#include <stdio.h>

int main(int argc, char* argv[])
{
 double a = 3.0 / 7.0;

 printf("%.3f\n", a); // 普通に...

 for (int i = 0 ; i < 8 ; ++i) {
 printf("%.*f\n", i, a); // 桁数を引数で指定する
 }

 return 0;
}

ideone.com で試してみた結果が、これです。
http://ideone.com/nLo0by


半月さんのコメント
迅速な回答ありがとうございました。 ソースもありとても助かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ