2012-01-11 19 views
5

संभव डुप्लिकेट:
Round a double to 2 significant figures after decimal pointगोलाई दशमलव अंक

मैं एक मिनट शैली डिग्री (23 7'29.3 ") में एक दशमलव डिग्री (23.1248) परिवर्तित करने के साथ काम करने की कोशिश कर रहा हूँ। यह है कि क्या मैं अब तक है:

double a=23.1248; 
    int deg=(int)a;//gives me the degree 
    float b=(float) (a-deg); 
    int min=(int) (b*60);//gives me the minutes 
    double sec= (double) ((c*60)-min);//gives me my seconds 

सब कुछ ठीक काम करता है, लेकिन मैं चाहते हैं सेकंड के करीब या तो निकटतम दसवीं या हंडरथ तक पहुंचने के लिए। मैंने दशमलव स्वरूपण को देखा है, लेकिन इसे स्ट्रिंग में नहीं डालना पसंद करेंगे। मैंने बड़े पैमाने पर भी देखा है लेकिन यह नहीं लगता कि यह सहायक होगा,

+0

js –

+0

में एक गोल विधि मैंने सोचा था कि दशमलव अंक पहले से ही दौर थे नहीं है। और ऋण संकेत, प्लस संकेत और विभाजन सभी फ्लैट थे :) "100 तक की ओर बढ़ने" के लिए, बस "Math.round()" का उपयोग करें: http://docs.oracle.com/javase/1.4.2/docs/api /java/lang/Math.html डबल एक्स = राउंड (वाई/100.0) * 100.0; – paulsm4

+0

बिगडेसिमल ठीक काम करता है, आप इस जवाब में एक जैसे गोल (संख्या, दशमलव) फ़ंक्शन बना सकते हैं। कोशिश करो, मुझे नहीं लगता कि यह क्यों काम नहीं करेगा। http://stackoverflow.com/a/8911683/744859 –

उत्तर

11

इसे स्केल करने के बाद संख्या पर Math.round(double) का उपयोग करने का प्रयास करें, फिर इसे वापस स्केल करें।

double x = 1.234; 
double y = Math.round(x * 100.0)/100.0; // => 1.23 

तुम भी BigDecimal उपयोग कर सकते हैं क्या तुम सच में हैवीवेट प्राप्त करना चाहते हैं:

BigDecimal a = new BigDecimal("1.234"); 
BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23") 
0

सबसे पहले, ऐसा करने के लिए लाइब्रेरी फ़ंक्शंस हैं, तो क्यों न केवल उन का उपयोग करें? Math.round() देखें। पहिया को फिर से शुरू करने की कोई ज़रूरत नहीं है। यदि आप चाहते थे, हालांकि, आप निम्नानुसार कोशिश कर सकते हैं। सौवां के जगह पर एक डबल राउंड के लिए:

x = 0.1 * floor(x * 10.0) 

10^कश्मीर जगह पर एक डबल राउंड के लिए::

x = 10^k * floor(x/10^k) 

x = 0.01 * floor(x * 100.0) 

दसवें के जगह पर एक डबल राउंड के लिए किसी भी भाषा में कार्यान्वयन - जावा सहित - सरल होना चाहिए। इसके साथ एक समस्या यह है कि यह वास्तव में गोल नहीं करता है, लेकिन आपकी स्थिति में छोटा हो जाता है। इसे ठीक करने के लिए, आप गोल करने से पहले अपने नंबर पर 0.5 * 10^के जोड़ सकते हैं। यदि आप बस गोल करना चाहते हैं, तो उपरोक्त संस्करणों का उपयोग करें, और गणना के पहले या बाद में 10^के जोड़ें।

+0

क्या आप फर्श() के बजाय round() का उपयोग नहीं करना चाहते हैं? मैं उम्मीद करता हूं कि 0.1 9 3 से 1 डीपी तक 0.2 हो जाएगा। –

+0

@brainzzy मैं चर्चा करता हूं कि बेस -10 संख्याओं के लिए फर्श() आदिम का उपयोग करके राउंड() और छत() के समान चीज़ को कैसे प्राप्त किया जाए। लेकिन अनिवार्य रूप से, हाँ, अगर वह निकटतम (हमेशा ऊपर या हमेशा नीचे) की ओर घूमना चाहता है, तो गोल() को काम करना चाहिए। – Patrick87

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^