2012-04-11 13 views
5

मैं एक समस्या है जो जब नेट में इस सरल एसक्यूएल क्वेरी के परिणामों प्राप्त करने की कोशिश होती है का सामना करना पड़ रहा है (ग #):अनंत अंश मूल्य

select 1/3 as col from dual 

OracleDataReader.GetValue(i) एक अपवाद फेंकता है:

Arithmetic operation resulted in an overflow. 
at Oracle.DataAccess.Types.DecimalConv.GetDecimal(IntPtr numCtx) 
at Oracle.DataAccess.Client.OracleDataReader.GetDecimal(Int32 i) 
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i) 

मुझे पता चला है इस त्रुटि occures कि जब संख्या परिशुद्धता 28 अंक के ऊपर जाता है, तो यह त्रुटि की ओर जाता है:

select round(1/3,29) as col from dual 

लेकिन इस के रूप में डबल त्रुटि "अमान्य कलाकार" हो जाता है सी # में स्तंभ मान के इलाज के लिए कोशिश कर रहा है नहीं

select round(1/3,28) as col from dual 

जाएगा

किसी को भी किसी भी दृष्टिकोण संख्या स्तंभों की सर्वव्यापक राउंडिंग के अलावा इस स्थिति से बचने के लिए पता है?

+0

आप बता सकते हैं क्यों आप डेटाबेस क्वेरी में 1/3 क्या करना चाहते हैं !! –

+0

यह सिर्फ उदाहरण था। कुछ सूत्रों के परिणामस्वरूप आप अनंत अंश प्राप्त कर सकते हैं - अंकगणितीय माध्य से अधिक जटिल गणनाओं से शुरू –

+0

यदि आप ऐसा करते हैं तो क्या होता है: 'दोहरी से 1.0/3.0 का चयन करें'? –

उत्तर

2

चूंकि डेटा प्रकार दशमलव है, यह सटीक होना चाहिए। दशमलव प्रकार में 1/3 अनंत अंश को स्टोर करना संभव नहीं है। सामान्य में Conversions from Single or Double to Decimal throw an OverflowException if the result of the conversion is not representable as a Decimal। इस प्रकार मुझे या तो इस मान को डबल के रूप में पढ़ने की आवश्यकता है या सुनिश्चित करें कि यह सही दशमलव है।