2010-02-20 11 views
23

मैं उपयोगकर्ता इनपुट के आधार पर एक स्ट्रिंग में एक डबल प्रस्तुति की सटीकता को बदलना चाहता हूं।एक चर परिशुद्धता के साथ जावा String.format कैसे करें?

String foo = String.format("%.*f\n", precision, my_double); 

लेकिन मैं एक java.util.UnknownFormatConversionException प्राप्त करते हैं: अभी मैं की तरह कुछ कोशिश कर रहा हूँ। इस दृष्टिकोण के लिए मेरी प्रेरणा सी printf और this resource (धारा 1.3.1) थी।

क्या मेरे पास कहीं भी एक सरल वाक्यविन्यास त्रुटि है, क्या जावा इस मामले का समर्थन करता है, या क्या कोई बेहतर दृष्टिकोण है?

संपादित करें:

मैं मैं की तरह कुछ कर सकता है लगता है:

String foo = String.format("%." + precision + "f\n", my_double); 

लेकिन मैं अभी भी इस तरह के एक आपरेशन के लिए देशी समर्थन में रुचि होगी।

उत्तर

18

आपने अपने स्वयं के प्रश्न का उत्तर दिया - अपनी प्रारूप स्ट्रिंग को गतिशील रूप से बनाएं ... मान्य प्रारूप स्ट्रिंग्स यहां उल्लिखित सम्मेलनों का पालन करें: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax

आप एक स्वरूपित दशमलव कि (दशमलव बिंदु सहित) 8 कुल पात्रों पर चाहते हैं और आप दशमलव बिंदु के बाद 4 अंक चाहते हैं, तो अपने प्रारूप स्ट्रिंग "% 8.4f" की तरह दिखना चाहिए ...

करने के लिए मेरा ज्ञान जावा में प्रारूप तारों से परे लचीला होने से परे "मूल समर्थन" नहीं है।

2

नहीं क्यों:

String form = "%."+precision+"f\n"; 
String foo = String.format(form, my_double); 

या:

public static String myFormat(String src, int precision, Object args...) 
{ 
    String form = "%."+precision+"f\n"; 
    return String.format(form, args); 
} 
+2

तो तुम ओ पी कुछ वह पहले से ही जानता है सुझाव है और अपने प्रश्न में जोड़ा? – Tom

+0

मैं ओपी को अपने स्वयं के स्थिर कार्य करने के लिए ओपी का सुझाव दे रहा हूं जो वह चाहता है जो करेगा (स्ट्रिंग प्रारूप का मूल कार्य जिसमें परिवर्तनीय परिशुद्धता शामिल है)। तो हाँ और नहीं, क्योंकि उसके पास पहले से ही ऐसा करने के लिए उपकरण हैं। या कम से कम यही वह है जो मैं करने की कोशिश कर रहा हूं। – Gerdi

2

आप DecimalFormat वर्ग का उपयोग कर सकते हैं।

double d1 = 3.14159; 
double d2 = 1.235; 

DecimalFormat df = new DecimalFormat("#.##"); 

double roundedD1 = df.format(d); // 3.14 
double roundedD2 = df.format(d); // 1.24 

आप रन टाइम कॉल पर सटीक सेट करना चाहते हैं:

df.setMaximumFractionDigits(precision) 
संबंधित मुद्दे