printf関数での浮動小数点フォーマット()
-
16-09-2019 - |
質問
私は、データがそれほど変化小数点で保存されているfloatの配列を持っているいくつかある123.40000
、123.45000
、123.45600
...今私はprintf()
で終わりにせずに0の文字列で、これらの値を印刷したい場合はそのように彼ら最後に、これらの0なし123.4
、123.45
、123.456
、です。これは可能ですか?もしそうなら、どのように?
解決
%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 );
}
他のヒント
私はこれがどのようにハック知っているがありません。
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
を返します。
%グラム使用します -
その大きさのためのより適切な方、いずれかの正常または指数表記で二重に印刷。 「G」は小文字を使用し、「G」は、大文字を使用します。このタイプは含まれていない小数点の右への微々たるゼロに固定小数点表記と少し異なります。また、小数点以下が全体の数字には含まれていません。
(十分な大きさ)のバッファに印刷します。バッファを印刷...とあれば、ドットを印刷バッファに'.'
ありません。
char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');
<時間>
の編集の
標準#
フラグを指定します:
#結果は ``代替形式「」に変換されます。 [...]については、A、 E、E、F、F、G、およびG変換、浮動小数点の変換結果 数は常に何の数字が続かない場合でも、小数点文字が含まれています それ。 [...] GおよびG変換の場合、末尾のゼロは、以下から除去されません 結果。 [...]
...しかし、あなたは末尾のゼロを得る:(