2012-03-29 17 views
6

मुझे नहीं पता कि मुझे java.lang.ArithmeticException: Invalid operation बड़ा दशमलव का उपयोग करते समय क्यों मिला।जावा BigDecimal arithmaticException अमान्य ऑपरेशन

public static String E (int exponent, String value){ 
BigDecimal ten= new BigDecimal("10"); 
BigDecimal tempValue=new BigDecimal (value); 
return tempValue.multiply(ten.pow(exponent)).toString(); 
} 

एक्स्पोनेंट्स में से कुछ इस तरह के -27 के रूप में मान हैं। क्या इसके आसपास कोई रास्ता है क्योंकि मूल मूल्यों को कई शून्यों से स्टोर करना मुश्किल होगा। मैंने बिगडेसिमल चुना क्योंकि मुझे सटीकता की आवश्यकता थी। अन्यथा, BigDecimal अनंत परिशुद्धता के लिए यह गणना करने के लिए है, जो की कोशिश करेंगे -

आप

उत्तर

4

धन्यवाद आप नकारात्मक घातांक के लिए चीजों को ऊपर उठाने रहे हैं, तो आप BigDecimal.pow(int, MathContext) में एक MathContext तो यह ज्यादा सटीक उपयोग करने के लिए कैसे जानता है निर्दिष्ट करना होगा कुछ मूल्यों के लिए संभव नहीं है।

(जब तक आप पूरी तरह से सुनिश्चित कि आपरेशन आप कर रहे हैं अंक की एक सीमित संख्या के साथ एक सटीक परिणाम है हो सकता है।)

+0

मुझे पूरा यकीन है कि इसमें अनंत परिशुद्धता नहीं है। मुझे अभी भी वह त्रुटि मिलती है। डबल का उपयोग तब तक नहीं पहुंच जाएगा जब तक कि कुछ ऑपरेशन किए गए हों, 0 के करीब किए जाते हैं। मैं नहीं देखता कि कुछ बंद करने के लिए बिजली कितनी अनंत परिशुद्धता हो सकती है और एक वैज्ञानिक कैलकुलेटर मूल्य को 99 तक रख सकता है। अन्यथा इसका प्रतिनिधित्व करने का एक बेहतर तरीका होगा? –

+0

क्या आप हमें अपवाद का स्टैक ट्रेस दे सकते हैं? –

+1

@ एररमेसेस 'पाउ (इंट)', जब ऋणात्मक संख्या दी जाती है, तो अंकगणित अपवाद फेंक दें। हमेशा। http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#pow%28int%29 – Joni

2

10 की शक्ति से एक BigDecimal गुणा करने के लिए यह शायद करने के लिए स्पष्ट है पाठक (और अधिक कुशल, भी) movePointLeft और movePointRight उपयोग करने के लिए:

इसके बजाय tempValue.multiply(ten.pow(exponent)) की आप tempValue.movePointRight(exponent) का प्रयोग करेंगे।