2016-02-16 12 views
26

मैं अपने आवेदन में अपनी संख्याओं के लिए बिगडेसिमल का उपयोग कर रहा हूं, उदाहरण के लिए, जेपीए के साथ। मैंने शर्तों 'परिशुद्धता' और 'पैमाने' के बारे में कुछ शोध किया लेकिन मुझे समझ में नहीं आया कि वे वास्तव में क्या हैं।बिगडेसिमल, सटीक और स्केल

क्या कोई मुझे बिगडिसीमल मान के लिए 'सटीक' और 'पैमाने' का अर्थ समझा सकता है?

@Column(precision = 11, scale = 2) 

धन्यवाद!

+0

प्रश्न 'java.math.bigDecimal' के साथ बिल्कुल कुछ भी नहीं मिला है। '@ javax.persistence.Column' जावा एसई का हिस्सा नहीं है। यह जेपीए का विषय है। – Tiny

+1

प्रेसिजन और स्केल शब्द अक्सर java.math.bigDecimal के लिए उपयोग किए जाते हैं, जो कि वह गणना के लिए उपयोग करता है, उदाहरण के लिए जेपीए के साथ। आईएसटीएम वह जानना चाहता है कि बिगडेसिमल के संदर्भ में उनका क्या मतलब है। –

उत्तर

39

एक BigDecimal दो मूल्यों द्वारा परिभाषित किया गया है। BigDecimal का मान unscaledValue*10^{-scale} माना गया है।

प्रेसिजन:

precision बगैर माप मूल्य में अंकों की संख्या है। उदाहरण के लिए, संख्या 123.45 के लिए, सटीक लौटे 5.

तो, परिशुद्धता मनमाना परिशुद्धता पूर्णांक की लंबाई इंगित करता है। यहाँ एक ही पैमाने के साथ संख्या के कुछ उदाहरण है, लेकिन विभिन्न परिशुद्धता हैं:

  • 12345/100000 = 0,12345 // पैमाने = 5, सटीक = 5
  • 12340/100000 = 0,1234 // पैमाने = 5, परिशुद्धता = 4
  • 1/100000 = 0,00001 // पैमाने = 5, सटीक = 1

विशेष मामला है कि संख्या शून्य (यानी 0.000) के बराबर है में, परिशुद्धता हमेशा 1 है।

स्केल:

शून्य या सकारात्मक हैं, तो scale दशमलव बिंदु के दाईं ओर अंकों की संख्या है। यदि ऋणात्मक है, तो संख्या के असुरक्षित मूल्य को स्केल की अस्वीकृति की शक्ति से दस गुणा किया जाता है। उदाहरण के लिए, -3 के पैमाने का मतलब बगैर माप का मूल्य इसका मतलब है कि 'BigDecimal' का पूर्णांक मान 10^{-scale} से गुणा किया जाता द्वारा 1000.

गुणा किया जाता है।

यहां विभिन्न तराजू, एक ही परिशुद्धता के कुछ उदाहरण हैं: पैमाने = 5 के साथ

  • 12345 0,12345
  • पैमाने के साथ 12345 4 = 1,2345
  • ...
  • 12345 पैमाने 0 के साथ = 12345
  • पैमाने -1 = 123,450
साथ

BigDecimal.toString:

toString विधि एक BigDecimal के लिए अलग तरह से पैमाने पर और precision के आधार पर व्यवहार करता है। (इस ओर इशारा करते हुए के लिए @RudyVelthuis के लिए धन्यवाद।)

  • तो scale == 0, पूर्णांक सिर्फ बाहर छपा है, के रूप में-है।
  • हैं scale < 0, ई संकेतन हमेशा प्रयोग किया जाता है (उदाहरण के लिए 5 पैमाने -1 का उत्पादन "5E + 1")
  • तो scale >= 0 और precision - scale -1 >= -6 एक सादे दशमलव संख्या का उत्पादन किया है (उदाहरण के लिए 10000000 पैमाने 1 पैदा करता है "१०,००,०००.०")
  • अन्यथा, ई-नोटेशन का उपयोग किया जाता है, उदाहरण के लिए 10 स्केल 8 "1.0E-7" उत्पन्न करता है क्योंकि precision - scale -1unscaledValue*10^{-scale} के बराबर -6 से कम है।

अधिक उदाहरण:

  • 19/100 = 0,19 // पूर्णांक = 19, पैमाने = 2, सटीक = 2 ​​
  • 1/1000 = 0,0001 // पूर्णांक = 1, पैमाने = 4, सटीक = 1
+2

असल में, '[12345, -1]' '1.2345E + 5' द्वारा बेहतर प्रतिनिधित्व किया जाता है, जो शायद 'ToString' भी वापस आ जाएगा। अन्यथा, बहुत अच्छी व्याख्या। –

+1

उदाहरणों के साथ महान स्पष्टीकरण! – jpadilladev

+0

@RudyVelthuis धन्यवाद, मैंने यह बताते हुए एक अनुभाग जोड़ा कि कैसे टूस्ट्रिंग विधि E + नोटेशन –

3

Javadoc का हवाला देते हुए:

परिशुद्धता बगैर माप मूल्य में अंकों की संख्या है।

और

शून्य या सकारात्मक हैं, पैमाने दशमलव बिंदु के दाईं ओर अंकों की संख्या है। यदि ऋणात्मक है, तो संख्या के असुरक्षित मूल्य को स्केल की अस्वीकृति की शक्ति से दस गुणा किया जाता है। उदाहरण के लिए, -3 के पैमाने का मतलब बगैर माप का मूल्य से गुणा किया जाता 1000.

14

प्रेसिजन: महत्वपूर्ण अंक

की कुल संख्या

स्केल: अंकों की संख्या दशमलव बिंदु के दाईं करने के लिए

(Source)

0

अपने उदाहरण से एनोटेशन अधिकतम अंक से पहले (पूरी तरह 11) दशमलव बिंदु के बाद 2 और 9:एक मनमाना परिशुद्धता पूर्णांक और एक 32-बिट पूर्णांक पैमाने:123456789,01

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