2017-09-17 17 views
1

文をC言語で使用して、.50.5として出力する必要があります。 次のコードを使用して簡単に実行できます。C言語での浮動小数点値の書式設定

printf("%03f", myfloatvalue); 

しかし、状況はmyfloatvalueは動的です。だから私はそれが3文字の数字かどうかわからない、それは.5または.56または.567かもしれない。上記の場合、私は0.50.56、および0.567として印刷する必要があります。

+0

私は..So iはprintfの( "%0 *のF"、場所、myfloatvalue)を使用することができます0.123456を表示する必要があります。 –

+1

0.56または0.567の(正確な)浮動小数点表現はありません。 –

答えて

3

フロリアンの答えに私のコメントに引き続き、"%0g"の形式は、先行ゼロを、例えばとの最短表現を出力します

#include <stdio.h> 

int main (void) { 

    float f[] = { .5, .56, .567 }; 
    size_t n = sizeof f/sizeof *f; 

    for (size_t i = 0; i < n; i++) 
     printf ("%0g\n", f[i]); 

    return 0; 
} 

使用例/出力

$ ./bin/floatfmt 
0.5 
0.56 
0.567 
+2

"%0g"と "%g"はどのように異なっていますか?最小の幅は指定されていないので、数値は埋め込まれません。 –

+0

これは、小数点の前に** **の先頭に**をつけます。 ':)' Eg 'man printf' *" 0値は0で埋められます。d、i、o、u、x、X、a、A "e、E、f、F、g" * –

+1

Cの標準では、「スペースパディングを実行するのではなく、フィールドの幅にパッドするために、先頭のゼロ(符号またはベースの表示に続く)を使用します。フィールドの幅は指定されていないので、パディングはありませんので、何もしません。 'printf("%g "、0.4);を試してテストすることができます。これは' .4'を出力すると思いますが、実際には '0.4'を出力すると思います。 –

6

%gフロートの可能な限り短い表現を印刷します。

printf("%g",myfloatvalue); 
+0

ほとんど "%0g" 'はそれを行います。 –

+0

@ DavidC.Rankin [同意しない](https://stackoverflow.com/questions/46263242/formatting-float-value-in-c-language#comment79493574_46263402)には、0が必要です。 – chux

関連する問題