2012-06-05 7 views
10

मैं एक बड़े दशमलव के परिशुद्धता और पैमाने को सत्यापित करने की कोशिश कर रहा हूं।मैं BigDecimal के साथ सटीकता और पैमाने को कैसे मान्य करूं?

मैं एक बड़ा दशमलव मान्य करने के लिए देख रहा हूं 10 या 2 के पैमाने की सटीकता से अधिक नहीं है। मैंने अधिकतम लम्बाई करने की कोशिश की ताकि मूल्य मेरी डीबी लंबाई की बाधाओं का उल्लंघन नहीं करेगा, लेकिन वह प्राप्त करने में असमर्थ था वह या तो काम कर रहा है। क्या कोई मुझे इस मुद्दे को हल करने के लिए दिशा में मुझे इंगित कर सकता है?

+0

शायद (ओरेकल आधार हालांकि) संख्या (10,2) की तरह? –

+0

हम sybase का उपयोग करते हैं, इसलिए ओरेकल के बारे में वास्तव में निश्चित नहीं है। मैं सिर्फ जावा में एक फ़ील्ड सत्यापनकर्ता बनाने का प्रयास कर रहा हूं, यदि परीक्षण के लिए एक बयान दिया गया है और यह सुनिश्चित कर लें कि सबमिट किया गया मूल्य 10,2 से अधिक न हो। –

उत्तर

23

BigDecimal वर्ग तीन तरीकों जो इस के लिए रुचि का हो सकता है:

  • precision() है, जो (उदाहरण के लिए बगैर माप मूल्य के लिए अंकों की संख्या देता है, संख्या 123.45 के लिए, सटीक लौटे 5)
  • scale(), जो दशमलव विभाजक के बाद अंकों की संख्या देता है जब सकारात्मक (scale() नकारात्मक हो सकता है, इस मामले में, संख्या के unscaled मूल्य को स्केल की अस्वीकृति की शक्ति से दस गुना गुणा किया जाता है। उदाहरण के लिए , -3 का एक पैमाने का मतलब है कि unscaled मूल्य 1000 से गुणा किया जाता है),
  • stripTrailingZeros(), जो BigDecimal देता है जो प्रतिनिधित्व से हटाए गए सभी पिछला शून्यों के साथ आता है।

उदाहरण के लिए, किसी दिए गए BigDecimal ख के लिए सटीक और बड़े पैमाने की गणना करने के लिए, हम ऐसा ही कुछ लिख सकते हैं:

BigDecimal noZero = b.stripTrailingZeros(); 
int scale = noZero.scale(); 
int precision = noZero.precision();  
if (scale < 0) { // Adjust for negative scale 
    precision -= scale; 
    scale = 0;   
} 
+0

यह वही है जो मैं खोज रहा था, मैं एपीआई में पैमाने और परिशुद्धता को पूरी तरह से चूक गया। मुझ पर शर्म की बात है। –

+0

@ टीटू, @ जॉर्ज - क्या आपको लगता है कि 'if' block - 'scale = 0;' और' precision - = scale; 'को बदला जाना चाहिए? – Premraj

+0

@Teetoo मैंने परिवर्तन किया, इसकी समीक्षा करें :) – Premraj

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