2012-03-22 17 views
14

strings.xml numaralı belgede bir dizede bir parametrenin olmasını istiyorum ve bu parametre çift değer olmalıdır. Ben %1$f kullanın. Burada - http://developer.android.com/reference/java/util/Formatter.html birçok örnek var, ama bir kaç tane double/float parametresine sahip olmak istiyorsam ve .'dan sonra sadece 2 basamağı olan ikinciyi istiyorum? %2$.2f veya %2.2$f gibi kombinasyonları kullanmayı denedim. Onlar da işe yaramadı. %.1f da çalışmıyor. Peki, strings.xml içindeki bir float/double değerini "nasıl özelleştirebilirim" bilen var mı? Teşekkürler. Yerinde olsaydımStrings.xml içinde noktadan sonra 2 basamaklı çift parametre

cevap

-5

Kabaca Şimdi bu cevap olduğunu bu

public String formatFigureTwoPlaces(float value) { 
    DecimalFormat myFormatter = new DecimalFormat("##0.00"); 
    return myFormatter.format(value); 
} 

public String formatFigureOnePlace(float value) { 
    DecimalFormat myFormatter = new DecimalFormat("##0.0"); 
    return myFormatter.format(value); 
} 
+26

Teşekkür ahbap göstermek isterseniz, ama ben ... hem çalışır .2f' '% 1 $ denetlenecektir gerekir. – lomza

+2

Buradaki yorum gerçek cevap! Bu soruya başka bir cevap olarak koymalısınız. Neredeyse hiç görmedim. – accordionfolder

+0

Iomza'nın yanıtındaki yorumlar gerçek çözümdür – Kachi

-2

gibi görüntülenme biçimini kontrol etmek biçimlendirici yöntemleri kullanın sonra basit değerler olarak kaynaklarda değerlerini saklamak ve ediyorum Eğer ondalık sayılar istediğinizde

Android birden fazla parametreyi oyuncu değişikliği ile berbat ve

iyi çözüm ben a.bf ortak stil% sürede biçimlendirmek: çok geç gelen ... ama umuyoruz diğer insanlara yardım etmek bulduk (ve sadece bu tür kaynaklar için es) dizeleri% n $ s olarak ve kod ondalık parametreleri konur String.format (benim dönüşüm ...) uygulamak



Örnek:


YANLIŞ YOL:

// xml dosyasında:

<string name="resource1">You has a desviation of %1$s and that is a %2$.2f%% percentage.</string> 

// Ve nedeniyle son satır bir özel durum oluşturur, böylece android ikame kaynakları sisteme java dosyası

String sresult = getString(R.string.resource1, svalue, spercentage); // <-- exception! 

Bu çözüm teknik olarak doğru ama yanlış içinde.



DOĞRU/ÇÖZÜM:

Bunun bir dize ikinci parametre dönüştürün. kodunda

<string name="resource1">You has a desviation of %1$s and that is a %2$s percentage.</string> 

Ve şimdi:

... 

    // This is the auxiliar line added to solve the problem 
    String spercentage = String.format("%.2f%%",percentage); 

    // This is the common code where we use the last variable. 
    String sresult = getString(R.string.resource1, svalue, spercentage); 
+0

"Yanlış" örneğinizde "spercentage" türü nedir? Tahmin ediyorum (@Nik Reiman'ın işaret ettiği gibi) bu bir "String" - yani bir float ('% 2 $ .2f' de) olarak geçmeye çalışırken bir istisna alamayacaksınız. Bu "cevap" eksik ve yanıltıcıdır. – BadCash

+0

Ayrıca bir dize kaynağından çalışmak üzere biçimlendirilmiş float'ları alamıyorum ve evet bir float geçiyorum. Dize kaynağında "% 1 $ 0.6f" kullanıyorum ve bir istisna alıyorum: java.util.MissingFormatWidthException:% 01 $ .6f bu yüzden bir şekilde karıştırılıyor. Bu cevap doğru. – Aaron

64

Sadece burada @ David Airam cevabı ekleyerek; Verdiği "yanlış" çözüm aslında doğrudur, ancak bir miktar düzeltmedir.XML dosyası içermelidir:

<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string> 

Şimdi Java kodunda:

String svalue = "test"; 
float sfloat= 3.1415926; 
String sresult = getString(R.string.resource1, svalue, sfloat); 

@ David Airam bildirilen gerektirir %f bir biçim belirteci, içine bir String reçel çalışmasını İstisnayı kayan nokta tipi. float kullanın ve böyle bir istisna yoktur.

Ayrıca, giriş verilerinizin başlangıçta bir dize olması durumunda (diyelim, EditText ya da bir şeyden), bir String'i bir float'a dönüştürmek için Float.valueOf()'u kullanabilirsiniz. Ancak, her zamanvalueOf() işlemlerini deneyin/yakalayın ve bu özel durum işaretlenmediğinden, NumberFormatException kasasını ele almalısınız. Benim için

+0

Teşekkürler! Zamanımı kurtardı –

0

% .1f iş size sonra sadece 1 rakamı ''

İlgili konular