2010-12-12 7 views
5

में कम से कम एक महत्वपूर्ण अंक के लिए प्रारूप को दोहराएं मेरे पास एक दशमलव फोर्मेट ऑब्जेक्ट है जिसका उपयोग मैं अपने सभी डबल मानों को अंकों की एक निश्चित संख्या में प्रारूपित करने के लिए उपयोग कर रहा हूं (मान लें 2) जब मैं उन्हें प्रदर्शित कर रहा हूं। मैं इसे सामान्य रूप से 2 दशमलव स्थानों पर प्रारूपित करना चाहता हूं, लेकिन मैं हमेशा कम से कम एक महत्वपूर्ण अंक चाहता हूं। उदाहरण के लिए, यदि मेरा मान 0.2 है तो मेरा फॉर्मेटर 0.20 से बाहर निकलता है और यह बहुत अच्छा है। हालांकि, अगर मेरा मूल्य 0.000034 है तो मेरा फॉर्मेटर 0.00 थूक जाएगा और मैं अपने फॉर्मेटर को 0.00003 थूकना पसंद करूंगा।जावा/एंड्रॉइड

उद्देश्य-सी में संख्या स्वरूपक यह बहुत सरलता से करते हैं, मैं बस अधिकतम संख्या में अंक निर्धारित कर सकता हूं जो मैं 2 पर दिखाना चाहता हूं और न्यूनतम संख्या में महत्वपूर्ण अंकों को 1 पर सेट करता हूं और यह मेरा वांछित आउटपुट उत्पन्न करता है, लेकिन कैसे हो सकता है मैं जावा में करता हूँ?

मैं किसी भी मदद की मेरी सराहना करता हूं।

केली

संपादित करें: मैं 0.00004 के रूप में मानों तो ०.००००३७ प्रदर्शित करता है गोलाई में दिलचस्पी रखता हूँ।

उत्तर

2

यह कुशल नहीं है, इसलिए यदि आप इस कार्रवाई को अक्सर मैं एक और समाधान की कोशिश करते हैं, लेकिन अगर आप केवल समय-समय पर फोन इस विधि काम करेंगे।

import java.text.DecimalFormat; 
public class Rounder { 
    public static void main(String[] args) { 
     double value = 0.0000037d; 
     // size to the maximum number of digits you'd like to show 
     // used to avoid representing the number using scientific notation 
     // when converting to string 
     DecimalFormat maxDigitsFormatter = new DecimalFormat("#.###################"); 
     StringBuilder pattern = new StringBuilder().append("0.00"); 
     if(value < 0.01d){ 
      String s = maxDigitsFormatter.format(value); 
      int i = s.indexOf(".") + 3; 
      while(i < s.length()-1){ 
       pattern.append("0"); 
       i++; 
      } 
     } 
     DecimalFormat df = new DecimalFormat(pattern.toString()); 
     System.out.println("value   = " + value); 
     System.out.println("formatted value = " + maxDigitsFormatter.format(value)); 
     System.out.println("pattern   = " + pattern); 
     System.out.println("rounded   = " + df.format(value)); 
    } 
} 
+0

धन्यवाद, साइबर-भिक्षु, जो बिल्कुल मुझे बिल्कुल चाहिए जैसा दिखता है! –

+0

@ केली, आपका स्वागत है! –

0
import java.math.BigDecimal; 
import java.math.MathContext; 


public class Test { 

    public static void main(String[] args) { 
     String input = 0.000034+""; 
     //String input = 0.20+""; 
     int max = 2; 
     int min =1; 
     System.out.println(getRes(input,max,min)); 
    } 

    private static String getRes(String input,int max,int min) { 
     double x = Double.parseDouble(((new BigDecimal(input)).unscaledValue().intValue()+"").substring(0,min)); 
     int n = (new BigDecimal(input)).scale(); 
     String res = new BigDecimal(x/Math.pow(10,n)).round(MathContext.DECIMAL64).setScale(n).toString(); 
     if(n<max){ 
      for(int i=0;i<max;i++){ 
       res+="0"; 
      } 
     } 
     return res; 
    } 
} 
+0

अरे जौहुतुत! सबसे पहले, उत्तर के लिए धन्यवाद। मेरे पास कुछ अतिरिक्त प्रश्न हैं, हालांकि। सबसे पहले, मुझे छंटनी के बजाय गोल करने में दिलचस्पी है, इसलिए मैं 0.000037 को 0.00003 के बजाय 0.00004 के रूप में प्रदर्शित करना चाहता हूं। दूसरा, अगर मेरा मूल नंबर 0.0000372 है, तो मुझे लगता है कि आपके द्वारा प्रदान किया गया एल्गोरिदम 3e-7 उत्पन्न करेगा, इस तथ्य के कारण कि मेरे इनपुट नंबर का अंतिम महत्वपूर्ण आंकड़ा ई -7 स्थान के रूप में है। क्या मैं उस पर आधार बंद कर रहा हूँ? आप जो भी अतिरिक्त स्पष्टीकरण प्रदान कर सकते हैं उसके लिए फिर से धन्यवाद! –

+0

हे केली। ऐसा लगता है कि आपके पास पहले से ही एक जवाब है। रास्ते से एक अच्छा सवाल है। – zawhtut