9

私はデータがさまざまな小数点で格納されているfloatの配列を持っているので、いくつかは、、...123.40000これらの値を文字列に出力したい場合は、最後に0を付けずに、、、、、これらの0を付けないようにします最終的には。これは可能ですか?もしそうなら、どのように?123.45000123.45600printf()123.4123.45123.456

4

4 に答える 4

19

%gフォーマッターを使用します。

printf( "%g", 123.4000 );

プリント

123.4

末尾のゼロは削除されますが、小数部がゼロの場合、残念ながら末尾の小数点も削除されます。printf()を使用して直接やりたいことを行う方法が実際にあるかどうかはわかりません-おそらくこのようなものが最善の策だと思います:

#include <stdio.h>
#include <math.h>

void print( FILE * f, double d ) {
    if ( d - floor(d) == 0.0 ) {
        fprintf( f, "%g.", d );
    }
    else {
        fprintf( f, "%g", d );
    }
}

int main() {
    print( stdout, 12.0 );
    print( stdout, 12.300 );
}
于 2009-12-07T23:26:17.193 に答える
3

これがどれほどハッキーかはわかりませんが、次のようになります。

http://codepad.org/e3Q3pUNd

float f = 124.000;
if (f == (int) f) {
    printf("%.1f\n", f); /* .1 can be changed */
} else {
    printf("%g\n", f);
}

を返します124.0

float f = 124.123000;
if (f == (int) f) {
    printf("%.1f\n", f); /* .1 can be changed */
} else {
    printf("%g\n", f);
}

を返します124.123

于 2009-12-08T00:04:50.313 に答える
0

(十分な大きさの)バッファーに出力します。バッファを印刷します...そしてバッファに何もない場合は'.'ドットを印刷します。

char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');

編集

標準は#フラグを指定します:

#結果は「代替形式」に変換されます。[...] a、A、e、E、f、F、g、およびG変換の場合、浮動小数点数の変換結果には、数字が続かない場合でも、常に小数点文字が含まれます。[...] gおよびG変換の場合、末尾のゼロは結果から削除されません。[...]

...しかし、末尾のゼロが表示されます:(

于 2009-12-08T00:43:47.150 に答える
0

%gを使用-

法線表記または指数表記のどちらか適切な大きさでdoubleを印刷します。「g」は小文字を使用し、「G」は大文字を使用します。このタイプは、小数点の右側の重要でないゼロが含まれないという点で、固定小数点表記とは少し異なります。また、整数には小数点は含まれていません。

于 2009-12-07T23:28:44.397 に答える