2009-08-20 6 views
9

String.format("%.2f", doubleValue);は切り捨てるのではなく丸めを防止するにはどうすればよいですか?JavaのString.format( "%。2f"、doubleValue)の丸めを防ぐ

doubleValue = 123.459 

doubleValue = 123.46 

をフォーマットした後、私は最後の数字を破棄したい、

123.45 

私はこれを行うには、他の方法がある知っている私はこのかどうかを知りたいです、 String.formatを使用して可能です。

答えて

12

あなたは常に丸めモードを設定することができます

http://java.sun.com/javase/6/docs/api/java/math/RoundingMode.html

をし、その後 HALF_EVENがデフォルトで使用されString.Formatの()を使用していますが、CEILING

にそれを変更することができますもう1つの柔軟なアプローチはありませんが(これはあなたが尋ねたものではありません):

DecimalFormat df = new DecimalFormat("###.##"); 
df.format(123.459); 
+0

小数点の左側にある数字が3桁を超えている場合はどうしますか?また、新しいオブジェクトを作成するのではなく、文字列に変換するdouble変数に直接使用することは可能ですか? –

+1

これは間違っています。小数点以下の桁数が6未満であれば、丸め半分が使用され、他の賢明なHALF_EVEN丸めが使用されます。私はこれがばかげているのがわかる! – Chad

3
doubleValue = 123.459 
doubleValue = Math.ceil(doubleValue*100)/100; 
+3

、および' ceil' ? – Rob

5

答えのように見えるのは大きな脂肪です。 http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec は、私はNumberFormatterはあなたがRoundingModeを設定することができますので、それは奇妙な彼らは、それを行うだろう見つける

を「その値は、アルゴリズム切り上げ半分を使用して丸められます」。しかし、あなたが言うように、それを行うための他の方法があります。あなたの価値から最初に0.005を引くのは明らかに簡単です。

+1

これは受け入れられる回答である必要があります。 @ DimitryKの答えは、String.format()がラウンドの代わりに切り捨てられることを意味します。これは真実ではありません。 – Aranda

-1

使用String.Formatの( "%2F。"、のdoubleValue - 0.005)負のもののためにあなたが切り捨てしたい場合は、正の値は `floor`を使用したくない

+4

この方法に注意してください。 'String.format("%.2f "、1.05 - .005)'はおそらく浮動小数点の不正確さのために '1.04'になります。 – Aranda

関連する問題