2016-03-31 8 views
0

私はそれが非常に基本的な質問であることを認識していますが、まだ私はいくつかの混乱があります。浮動小数点値のフォーマットspcifier - ドットカウントですか?

char *p = malloc(100); 
sprintf (p,".. %03.1f .. \n", 2.5); 

結果:2.5

char *p = malloc(100); 
sprintf (p,".. %05.1f .. \n", 2.5); 

結果:だから002.5

は、私が言うのならば私の理解は正しいです:

  • %05.1 - >はで表し合計5の場所hoここで、.も数えられている。
+1

はい、 '%のx.yf'、 'X'は、総幅で、' y'は、小数点以下の桁数です。 – Amadan

答えて

1

fprintfのマニュアルページには、「フィールドの幅。フィールド幅の最小値を指定するオプションの10進数文字列(0以外の最初の桁)。 ... '。 '。'以降フィールド内の場所を占め、それは数えられるべきです。

0

いいえ! 0x.yfそれは以下を表します:小数点以下の数字は最大でxです。yは最大でもyの数字を表しますが、.はカウントされません!

.number整数指定子(d、i、o、u、x、X)の場合、precisionは書き込まれる最小桁数を指定します。書き込まれる値がこの数よりも短い場合、結果に先行ゼロが埋められます。結果が長くても値は切り捨てられません。精度0は、値0の文字が書き込まれないことを意味します。e、Eおよびf指定子の場合、小数点以下の桁数です。 gおよびG指定子の場合 - これは印刷する有効桁数の最大値です。 sの場合、これは印刷される最大文字数です。デフォルトでは、終了するヌル文字が見つかるまで、すべての文字が出力されます。 c型の場合は効果がありません。精度が指定されていない場合、デフォルトは1です。精度が明示的に指定されていない期間が指定されている場合は、0が仮定されます。

フォーマットストリング%05.1fでこのhttps://ideone.com/RAMYdj

+1

申し訳ありませんが、これは間違っています - 少なくとも浮動小数点数については。 0はゼロ埋め込み用です。 'x'(または問題の5)は最小フィールド幅です(_not_小数点の前の桁数)。 'y'(または1)は小数点以下の桁数です。整数書式化に関する討論は、 '%f'形式に関する質問に接して関連しています。詳細は、['printf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html)を参照してください。 –

0

を参照して、合計フィールド幅は、(少なくとも)5、小数点以下一桁が存在することになるであろう、そしてフィールドは左側にゼロパディングであろうパッディングなしで5ポジションより短い場合。 5桁以上の数字が必要な場合は、数字を使用します(たとえば、1.2E37を印刷してみてください)。詳細については、printf()のPOSIX仕様などの仕様を読んでください。例えば

#include <stdio.h> 

int main(void) 
{ 
    double values[] = 
    { 
     0, 0.1, -1.0, 3.1415, -99.9, -123.4, -2345.6, 
     88.8, 777.77, 9876.54, -1000000.2, 222333444.555, 
    }; 
    enum { NUM_VALUES = sizeof(values)/sizeof(values[0]) }; 

    for (int i = 0; i < NUM_VALUES; i++) 
     printf("%16.5f = %05.1f\n", values[i], values[i]); 

    return 0; 
} 

出力例:

  0.00000 = 000.0 
     0.10000 = 000.1 
     -1.00000 = -01.0 
     3.14150 = 003.1 
     -99.90000 = -99.9 
     -123.40000 = -123.4 
    -2345.60000 = -2345.6 
     88.80000 = 088.8 
     777.77000 = 777.8 
     9876.54000 = 9876.5 
    -1000000.20000 = -1000000.2 
222333444.55500 = 222333444.6