2012-10-05 15 views
8

684.54の後に数字が切り捨てられ(丸められていない)、の数字が684.545007の2点精度で印刷しようとしています。小数点以下の桁数の後に浮動小数点数を切り捨てる方法(丸めなし)?

私は

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

が使用する場合、それは684.55を出力しますが、私が取得したいのですが684.54です。

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

+4

なぜ4を期待していたのですか? – chris

+9

あなたが '684.54'を期待していたなら、あなたは間違った結果を期待していました。それは簡単です。 –

+0

私は丸められた値を望まないので。 このコードは、Programming Online Judge codeソリューションの一部です。 – vhbsouza

答えて

22

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

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

整数への変換は、小数部分を切り捨て。 C++ 11またはC99で

、あなたはヘッダ<cmath>または<math.h>から(この目的のために専用の機能truncを使用することができます。これは、整数型に収まる値に制限を回避しますが。

std::trunc(100 * var)/100  // no need for casts 
+0

C99標準ライブラリをお持ちの場合は、 'trunc()'を使うことができます。 – caf

+0

@caf:ありがとう、私はそれを追加しました。誰かが最初の解決策のために 'lprint()'を提案するのだろうかと思います。 –

1
ここで
printf("%.2f\n", var - 0.005); 
+9

.005は正確に表現できないため、これはいくつかの値に対して間違った結果を生むためにバインドされています。 –

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); 
関連する問題