2016-10-31 9 views
0

私はなぜ出力に123.123が得られないのかを理解しようとしています。 lfの代わりにfを使用する必要がありますか?出力に123.123000が表示されるのはなぜですか?

#include <stdio.h> 

void main() { 
    double foo = 123.123; 
    int blah = 54321; 

    printf("%d\n", blah); 
    printf("%10d \n", blah); 
    printf("%08d\n",blah); 
    printf("%10d \n", blah); 
    printf("%010d \n", blah); 
    printf("%lf\n", foo);  // Why am I getting 123.123000? 
    printf("%.4f\n", foo); 
    printf("%4.2f \n", foo); 
} 
+1

あなたは123.123と123.123000は同じ数であることを知っています、右? – immibis

答えて

3

あなたはので、デフォルトでは小数点以下6桁まで"%lf"プリントを123.123000を得ています。代わりに、%.3lfを使用してください。

2

%fのデフォルト精度は小数点以下6桁ですので、出力は123.123000です。

小数部の末尾のゼロ(および小数点が残らない場合は小数点)を削除するには、%gを使用します。 %lflscanfフォーマットで必要である

double変数に数値を変換するが、それは、すべての浮動小数点値をdoubleとして渡されprintfため役に立ちません。したがって、%lf%fは、printfとまったく同じように動作します。

mainのプロトタイプは、int main(void)または `int main(int argc、char * argv [])または同等のものです。

+0

このようにifをfと置き換えると123.123 ..と出力されます。 – Zack

+0

いいえ、 'printf("%g \ n "、foo);'で '123.123'を取得します。 '%lf'と'%f'は 'printf'とまったく同じように動作します。 – chqrlie

+0

だからfと同じ振る舞いをしているが、入力を読むときにのみ使用しなければならない場合は、 – Zack

0

これは単なるデフォルトの精度です。 printfファンクション%lfおよび%fでは、同じ方法で解釈されます。実際の違いはscanf関数で、%lfは値をdoubleとして読み込み、%fはその値をfloatとして読み込みます。 あなたはまだ%lfを使用することができます興味深い記事here

+0

scanfを使用して入力を読み取るときは、常に正しい場合に使用しますか? – Zack

+0

ダイブラーの場合は、yes: – FMiscia

+0

ありがとう! – Zack

1

があります、ちょうどあなたが望むどのように多くの精度の桁数、それを伝える(例3):

printf("%.3lf,\n" foo); //prints 123.123

+0

または、最初の6文字でどれだけ重要であるかわからない場合は、 '%g'を使用してください。 – chqrlie

+0

正解です。これはあなたの答えに既に提案されています;-) – davedwards

+0

ありがとうございました。 – Zack

関連する問題