2013-06-12 11 views
20

Projemde çifte değerler kullanıyorum ve her zaman ilk iki ondalık basamağı göstermek istiyorum. Bu işlevi yuvarlama için kullanıyorum ve eğer yazdırdığım değer 3.47233322 ise (doğru) 3.47 basıyor. Ama yazdığımda, örneğin, 2. değeri 2.0 basar.Java: çift: DAİMA iki ondalık basamak gösteriliyor

public static double round(double d) { 
    BigDecimal bd = new BigDecimal(d); 
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
    return bd.doubleValue(); 
} 

2.00!

Bunu Strings kullanmadan yapmanın bir yolu var mı?

Teşekkürler!

DÜZENLEME: numarasından sonra iki basamak yazdırmak için biliyorum: Cevaplarınızdan (ı için teşekkür ederim wich) Ben arıyorum neyi anlatmakta belli değildi anlamak (ve bunun için üzgünüm) dan önerdiğin çözümleri kullanarak ... istediğim şey, çift değeri doğrudan iki basamakta saklamak! Bu şekilde System.out.println("" + d) gibi bir şey yaptığımda (burada d değeri 2 olan çiftliğim) 2.00 basıyor.

Bunu yapmanın bir yolu olmadığını düşünmeye başladım ... doğru mu? Yine de cevaplarınız için tekrar teşekkürler, lütfen bir çözüm biliyorsanız bana bildirin!

+3

. Yalnızca sunulduğunda biçimlendirilme biçimini değiştirebilirsiniz. –

+0

Evet ... Sanırım haklısın ... Değerlerimi kullanıcılara gösterdiğim her defasında biçimlendirmeliyim ... Çok fazla zaman! Cevabınız için teşekkür ederim! – aveschini

+0

Eh, sadece biçimlendirici yöntemini bir kez yazmanız gerekiyor, bunun için endişelenmeyeceğim. ;) –

cevap

41

Böyle bir şey kullanabilirsiniz: Ben gerçek yanıtı gerekli ve bu google geldi çünkü aslında soruyu cevaplamak için

double d = 1.234567; 
DecimalFormat df = new DecimalFormat("#.00"); 
System.out.print(df.format(d)); 

Düzenlenmiş ve Birisi, ondalıklar 0 olduğunda işe yaramayacak olmasına rağmen yanıt olarak işaretlemiştir.

+0

Aradığım şeyi netleştirmek için sorumu düzenledim. Yine de teşekkürler! – aveschini

+1

Eğer '0,3' rakamı verilirse, '.30' teklifinde kodu buldum, bu yüzden # # 0,00 desenini kullandım ve şu ana kadar gayet iyi çalıştı –

+0

Benim için bu cevap aslında işe yaramıyor. İşte alacağım: '13310.0 13676.31 26600.2' – wintermute

17

bunu kullanın için java.text.NumberFormat:

NumberFormat nf= NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(2); 
nf.setMinimumFractionDigits(2); 
nf.setRoundingMode(RoundingMode.HALF_UP); 

System.out.print(nf.format(decimalNumber)); 
+0

Aradığımı netleştirmek için sorumu düzenledim. Yine de teşekkürler! – aveschini

+0

Cevabı ekledim. – darijan

+0

xxx.00 – Dexter

3

DecimalFormat en kolay seçenektir kullanmak:

double roundTwoDecimals(double d) { 
     DecimalFormat twoDecimals = new DecimalFormat("#.##"); 
     return Double.valueOf(twoDecimals.format(d)); 
} 

Umut bu sorunu çözer ...

+0

Şu an çözümünüzü denedim ... işe yaramıyor. 3'ü koyuyorum ve 3.0'ı basıyor. – aveschini

+0

Benim hatam. Çok hızlıydım ve HER ZAMAN okuyamadım. DecimalFormat değerini "##. 00" olarak değiştirmeyi deneyin. Bu, sorununuzu çözecek! –

7

Sadece yapabilirsiniz:

double d = yourDoubleValue; 
String formattedData = String.format("%.02f", d); 
+0

Numarayı herhangi bir şekilde yuvarlamak istemeyen kişinin cevabı budur. – Siavas

+0

Değeri –

0
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##"); 
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 
+0

'dan sonra çiftin kendisinde saklamak istiyorum Kodunuzla ilgili biraz açıklama güzel olurdu. – Sakuto

0
Bu gibi bir şey kullanabilirsiniz

:

0 ayrıcacevabında saklamak istersenizsonra biçim Dize (0,00) kullanan

double d = 2.46327; 
DecimalFormat df = new DecimalFormat("0.00"); 
System.out.print(df.format(d)); 

çıkışı: 2,46

double d = 0.0001; 
DecimalFormat df = new DecimalFormat("0.00"); 
System.out.print(df.format(d)); 

çıkışı: 0.00

Ancak, "(DecimalFormat df = new DecimalFormat kullanırsanız 0 ##. ");

double d = 2.46327; 
DecimalFormat df = new DecimalFormat("0.##"); 
System.out.print(df.format(d)); 

çıkışı: 2.46

double d = 0.0001; 
DecimalFormat df = new DecimalFormat("0.##"); 
System.out.print(df.format(d)); 

çıkışı: Sana yolu java depolar çift değerleri değiştirmek sanmıyorum 0