の後に数値が切り捨てられる(丸められない)という意味で、684.545007
2ポイントの精度で数値を印刷しようとしています。684.54
使うとき
var = 684.545007;
printf("%.2f\n",var);
出力します684.55
が、取得したいのはです684.54
。
誰かがこれを修正する方法を知っていますか?
あなたが探しているのは切り捨てです。これは機能するはずです(少なくともそれほど大きくない数の場合):
printf(".2f", ((int)(100 * var)) / 100.0);
整数への変換は、小数部分を切り捨てます。
trunc
C ++ 11またはC99では、この目的のために専用の関数を使用できます(ヘッダー<cmath>
またはから<math.h>
。これにより、整数型に適合する値への制限が回避されます。
std::trunc(100 * var) / 100 // no need for casts
これが私のアプローチです。見苦しいように見えますが、ほとんどの場合は機能します。たとえば、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);
printf("%.2f\n", var - 0.005);