684.54
の後に数字が切り捨てられ(丸められていない)、の数字が684.545007
の2点精度で印刷しようとしています。小数点以下の桁数の後に浮動小数点数を切り捨てる方法(丸めなし)?
私は
var = 684.545007;
printf("%.2f\n",var);
が使用する場合、それは684.55
を出力しますが、私が取得したいのですが684.54
です。
これを修正する方法を知っている人はいますか?
684.54
の後に数字が切り捨てられ(丸められていない)、の数字が684.545007
の2点精度で印刷しようとしています。小数点以下の桁数の後に浮動小数点数を切り捨てる方法(丸めなし)?
私は
var = 684.545007;
printf("%.2f\n",var);
が使用する場合、それは684.55
を出力しますが、私が取得したいのですが684.54
です。
これを修正する方法を知っている人はいますか?
あなたが探しているのは切り捨てです。これは、(少なくともそれほど大きくない数のため)動作するはず:
printf(".2f", ((int)(100 * var))/100.0);
整数への変換は、小数部分を切り捨て。 C++ 11またはC99で
、あなたはヘッダ<cmath>
または<math.h>
から(この目的のために専用の機能trunc
を使用することができます。これは、整数型に収まる値に制限を回避しますが。
std::trunc(100 * var)/100 // no need for casts
C99標準ライブラリをお持ちの場合は、 'trunc()'を使うことができます。 – caf
@caf:ありがとう、私はそれを追加しました。誰かが最初の解決策のために 'lprint()'を提案するのだろうかと思います。 –
printf("%.2f\n", var - 0.005);
.005は正確に表現できないため、これはいくつかの値に対して間違った結果を生むためにバインドされています。 –
は私のアプローチです。それが醜いようだが、ほとんどの場合、作業を行うなど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);
を
なぜ4を期待していたのですか? – chris
あなたが '684.54'を期待していたなら、あなたは間違った結果を期待していました。それは簡単です。 –
私は丸められた値を望まないので。 このコードは、Programming Online Judge codeソリューションの一部です。 – vhbsouza