2009-08-20 15 views
9

String.format("%.2f", doubleValue);'u yalnızca kesmek yerine yuvarlamadan (yuvarlak yarım algoritma) nasıl önleyebilirim?Java'da String.format ("%. 2f", doubleValue) içinde yuvarlamayı önleme

örn. biçimlendirme sonrasında

doubleValue = 123.459 

,

doubleValue = 123.46 
Sadece son rakamı silmek istediğinizden

,

Bunu yapmak için başka yolları da vardır biliyorum
123.45 

, sadece bu olmadığını bilmek istiyorum String.format kullanılarak mümkündür.

cevap

12

Hep yuvarlama modunu ayarlayabilirsiniz:

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

ve sonra HALF_EVEN varsayılan olarak kullanılır String.format() kullanın, ancak TAVAN

olarak değiştirebilirsiniz başka hiçbir esnek yaklaşım (ama bu sizin sorduğunuz şey değil) olacaktır:

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

Ondalık noktasının solundaki rakamlar 3 basamaktan fazla olabilirse ne yapmalısınız? Ayrıca, doğrudan yeni bir nesne oluşturmak yerine onu bir dizeye dönüştürecek bir çift değişken üzerinde kullanmak mümkün mü? –

+1

Gelecekte referans bu yanlış. Ondalık basamaklar 6 ise, bu durumda yarı yuvarlaktır, diğer bilge HALF_EVEN yuvarlama kullanılır. Bu saçmalamayı buldum! – Chad

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

ve' ceil' ? – Rob

5

Yanıtın büyük bir şişmanlık olduğu görülüyor NO. http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec onlar NumberFormatter verir beri RoundingMode ayarlamak için, bunu yapar mısın garip buluyorum

"sonra değeri yuvarlak yarım yukarı algoritması kullanılarak yuvarlanır". Ama dediğin gibi, bunu yapmanın başka yolları var. Açıkçası en kolay olanı, ilk önce değerinizden .005 çıkarır.

+1

Bu kabul edilen cevap olmalı. @ DimitryK'ın cevabı, String.format() 'ın yuvarlak yerine kırpmak için elde edilebileceğini ima eder. – Aranda

-1

kullanım String.format ("% 2f.", DoubleValue - 005) negatif olanlar için size kesilmesini istediğiniz varsa, pozitif değerler için `floor` kullanmak istemiyorum

+4

Bu yaklaşıma dikkat edin! "String.format" ("%. 2f", 1.05 - .005) "muhtemelen 1.04'tür, bu da muhtemelen kayan nokta yanlışlıklarından kaynaklanır. – Aranda