12

の後に数値が切り捨てられる(丸められない)という意味で、684.545007 2ポイントの精度で数値を印刷しようとしています。684.54

使うとき

var = 684.545007;
printf("%.2f\n",var);

出力します684.55が、取得したいのはです684.54

誰かがこれを修正する方法を知っていますか?

4

3 に答える 3

25

あなたが探しているのは切り捨てです。これは機能するはずです(少なくともそれほど大きくない数の場合):

printf(".2f", ((int)(100 * var)) / 100.0);

整数への変換は、小数部分を切り捨てます。

truncC ++ 11またはC99では、この目的のために専用の関数を使用できます(ヘッダー<cmath>またはから<math.h>。これにより、整数型に適合する値への制限が回避されます。

std::trunc(100 * var) / 100     // no need for casts
于 2012-10-05T03:05:31.300 に答える
2

これが私のアプローチです。見苦しいように見えますが、ほとんどの場合は機能します。たとえば、varはintよりも大きくなる可能性があり、ゼロまたは奇妙な「-0」になる可能性があります。ただし、無限大とNaNは処理しません。

double var = 684.545007; // or whatever
double var_trunc = var>=0. ? floor(var*100.)/100. : ceil(var*100.)/100.;
printf ("%g\n", var_trunc);
于 2014-08-05T12:54:32.817 に答える
1
printf("%.2f\n", var - 0.005);
于 2012-10-05T03:22:47.900 に答える