2012-04-30 9 views
7

में दशमलव दशमलव निकालें BigDecimal का उपयोग कर दशमलव बिंदु के बाद एक संख्या को निकालने के लिए कैसे करें?BigDecimal

बिगडेसिमल डी = BigDecimal.valueOf (1548.5649);

परिणाम: निकालने केवल: 5649

+2

ध्यान दें: आप का उपयोग करना चाहिए 'BigDecimal.valueOf (" 1548.5649 ");' बजाय क्योंकि 'double' के बीच रूपांतरण और 'बिगडेसिमल' अजीब साइड इफेक्ट्स का कारण बन सकता है। यदि आपको परिशुद्धता की आवश्यकता है, तो 'डबल' और 'फ्लोट' से बचें। –

+1

@AaronDigulla मुझे लगता है कि आपका मतलब नया BigDecimal ("1548.5649") है क्योंकि कोई BigDecimal.valueOf (स्ट्रिंग) विधि नहीं है। –

उत्तर

10

प्रयास करें:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());  
System.out.println(result); 

प्रिंट:

5649 
6

प्रयास करें BigDecimal.remainder:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal fraction = d.remainder(BigDecimal.ONE); 
System.out.println(fraction); 
// Outputs 0.5649 
+0

यह प्रदर्शित होता है: 1548.564900000000079671735875308513641357421875 – Mehdi

+1

यह मेरे लिए '0.5649' प्रदर्शित करता है। –

+0

हां यह सच है :) धन्यवाद;) – Mehdi

4

इस चाल करना चाहिए:

d.subtract(d.setScale(0, RoundingMode.FLOOR)); 

setScale() राउंड शून्य दशमलव स्थानों के लिए संख्या, और के बावजूद इसका नाम d के मान को म्यूट नहीं करता है।

+0

यह काम है ... धन्यवाद :) – Mehdi

-1

d.doubleValue() उपयोग करने के लिए डबल मूल्य

+2

यह एक ही नंबर लौटाता है: 1548.5649 – Mehdi

0

आप जो लिखते ही परिणाम के रूप में चाहते हैं नहीं बताया प्राप्त करने की कोशिश।

String s = d.toPlainString(); 
int i = s.indexOf('.'); 
if (i < 0) { 
    return ""; 
} 
return s.substring(i + 1); 
+0

यह केवल लोकेल के लिए उपयोग करता है। दशमलव विभाजक के रूप में। लेकिन Locales हैं जो उपयोग कर रहे हैं,। – BetaRide

+0

@ बीटाराइड: मुझे पता है कि, मैं फ्रेंच बोल रहा हूं, और कॉमा का उपयोग यहां किया जाता है। लेकिन BigDecimal.toPlainString() लोकेल-जागरूक नहीं है। यह डॉट का उपयोग दशमलव विभाजक के रूप में करता है जो भी लोकेल है। –

1

यदि मान ऋणात्मक है, का उपयोग करते हुए सबसे आसान तरीका शायद एक स्ट्रिंग में BigDecimal को बदलने, और सबस्ट्रिंग लेने के लिए है d.subtract(d.setScale(0, RoundingMode.FLOOR)) एक गलत दशमलव को वापस कर देगा।

उपयोग इस:

BigInteger decimal = 
       d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger(); 

यह रिटर्न या 1548.5649 के लिए 5649-1548.5649

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