मैं strings.xml
में एक स्ट्रिंग में पैरामीटर रखना चाहता हूं और यह पैरामीटर एक डबल मान होना चाहिए। तो मैं %1$f
का उपयोग करता हूं। यहां - http://developer.android.com/reference/java/util/Formatter.html कई उदाहरण हैं, लेकिन अगर मैं कुछ double/float
पैरामीटर रखना चाहता हूं और मैं चाहता हूं कि .
के बाद केवल 2 अंक हों? मैंने %2$.2f
या %2.2$f
जैसे संयोजनों का उपयोग करने की कोशिश की। उनमें से कोई भी काम नहीं किया। %.1f
भी काम नहीं करता है। तो, क्या कोई जानता है कि मैं strings.xml
के अंदर float/double
मान को "कस्टमाइज़" कैसे कर सकता हूं? धन्यवाद।स्ट्रिंग्स.एक्सएमएल में डॉट के बाद 2 अंकों के साथ डबल पैरामीटर?
उत्तर
तो यह मेरे थे मैं मोटे तौर पर इस
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);
}
मैं अब इस जबाब है कि जैसे सरल मूल्यों के रूप में संसाधनों में मान संग्रहीत करना चाहते हैं, और उसके बाद फ़ॉर्मेटर तरीकों का उपयोग उनके दिखाई देने नियंत्रित करने के लिए, बहुत देर से पहुंचने ... लेकिन मैं सक्षम होने की आशा अन्य लोगों को मदद करने के लिए:
एंड्रॉयड से अधिक पैरामीटर प्रतिस्थापन के साथ बेकार है जब आप दशमलव संख्या चाहते हैं और a.bf
सबसे अच्छा समाधान मैं आम शैली% में इस प्रारूप पाया है (और केवल इस तरह के resourc के लिए ते) के रूप में तार% n $ s और कोड में दशमलव मापदंडों डाल दिया है String.Format (साथ मेरी रूपांतरण ...) लागू
उदाहरण:
गलत रास्ता:
// xml फ़ाइल में:
<string name="resource1">You has a desviation of %1$s and that is a %2$.2f%% percentage.</string>
// और एंड्रॉयड प्रतिस्थापन संसाधन प्रणाली इतनी अंतिम पंक्ति एक अपवाद उत्पन्न होगा की वजह से जावा फ़ाइल
String sresult = getString(R.string.resource1, svalue, spercentage); // <-- exception!
यह समाधान तकनीकी रूप से सही लेकिन सही नहीं है में।
सही तरीका/समाधान:
बस एक स्ट्रिंग में दूसरा पैरामीटर परिवर्तित।
<string name="resource1">You has a desviation of %1$s and that is a %2$s percentage.</string>
और अब कोड में:
...
// 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);
आपके "गलत" उदाहरण में 'spercentage' का प्रकार क्या है? मैं अनुमान लगा रहा हूं (जैसा कि @ निक रीमन बताता है) कि यह एक 'स्ट्रिंग' है - यानी कोई आश्चर्य नहीं कि आपको फ्लोट के रूप में पास करने की कोशिश करते समय अपवाद प्राप्त हो रहा है ('% 2 $ .2f' पर)। यह "उत्तर" अपूर्ण और भ्रामक है। – BadCash
मुझे स्ट्रिंग संसाधन से काम करने के लिए स्वरूपित फ्लोट भी नहीं मिल सकते हैं, और हाँ मैं एक फ्लोट पास कर रहा हूं। मैं स्ट्रिंग संसाधन में "% 1 $ 0.6f" का उपयोग करता हूं, और मुझे अपवाद मिलता है: java.util.MissingFormatWidthException:% 01 $ .6f तो यह किसी भी तरह उलझन में हो रहा है। यह जवाब सही है। – Aaron
बस @ दाऊद Airam का जवाब यहाँ को जोड़ने; वह "गलत" समाधान देता है जो वास्तव में सही है, लेकिन थोड़ी सी चिमटा के साथ।एक्सएमएल फ़ाइल शामिल करना चाहिए:
<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string>
अब जावा कोड में:
String svalue = "test";
float sfloat= 3.1415926;
String sresult = getString(R.string.resource1, svalue, sfloat);
अपवाद है कि @ दाऊद Airam सूचना दी %f
के साथ एक फॉर्मेट स्पेसिफायर है, जो एक आवश्यकता है में एक String
जाम करने की कोशिश कर रहा से है फ़्लोटिंग प्वाइंट प्रकार। float
का उपयोग करें और ऐसा कोई अपवाद नहीं है।
इसके अलावा, आप स्ट्रिंग में एक स्ट्रिंग को कनवर्ट करने के लिए Float.valueOf()
का उपयोग कर सकते हैं यदि आपका इनपुट डेटा मूल रूप से एक स्ट्रिंग था (कहें, EditText
या कुछ से)। हालांकि, आपको हमेशाvalueOf()
संचालन को पकड़ने/पकड़ने और NumberFormatException
केस को संभालने के लिए, क्योंकि यह अपवाद अनचेक किया गया है।
धन्यवाद! मेरा समय बचाया –
% मेरे लिए .1f काम आप के बाद ही 1 अंकों ','
धन्यवाद, दोस्त दिखाना चाहते हैं, लेकिन मैं देखरेख चाहिए ... '% 1 $ .2f' रूप में अच्छी तरह से काम करता है, तो। – lomza
यहां टिप्पणी असली जवाब है! आपको इसे इस प्रश्न का एक और जवाब देना चाहिए। मैंने लगभग इसे नहीं देखा। टिप्पणियों में Iomza द्वारा उत्तर – accordionfolder
वास्तविक समाधान – Kachi