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


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

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

printf("%.nf",x);


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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/06/02 17:09:36

ベストアンサー

id:a-kuma3 No.1

回答回数4972ベストアンサー獲得回数2154

フィールド幅に、アスタリスクを使います。
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

id:hantsuki

迅速な回答ありがとうございました。
ソースもありとても助かりました。

2013/06/02 22:09:34

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません