2012-07-03 8 views
5

मेरे पास एक दशमलव संपत्ति & है जिसमें मैं JSON.NET का उपयोग करके & deserializing serializing कर रहा हूँ। मेरी समस्या यह है कि यदि दशमलव मान 100000000000023063.0 है, तो जब मैं deserialize यह 100000000000023000 में परिवर्तित हो जाता है। मैंने JSON & की जांच की है यह निश्चित रूप से 100000000000023063.0 के रूप में दर्ज की गई है।.NET/C# दशमलव क्रमबद्धता समस्याएं

मैं इसे &

decimal.Parse("100000000000023063.0") 

=

100000000000023063.0 

लेकिन

var d = (decimal)100000000000023063.0 

=

100000000000023000 
देखा है

मैं स्ट्रिंग & के रूप में भंडारण करके इस समस्या को हल कर सकता हूं जो एक संपत्ति है जो दशमलव करता है। पर्स() लेकिन क्या किसी को पता है कि यह क्यों हो रहा है?

उत्तर

12

ऐसा इसलिए है क्योंकि 100000000000023063.0double स्थिर है, जिसे आप decimal पर परिवर्तित कर रहे हैं, और सटीकता खो रही है।

इस बजाय तरह लिखें यह:

var d = 100000000000023063.0M; 

M प्रत्यय सी # संकलक उस नंबर एक decimal स्थिर है बताता है।

वास्तव में आपको इसके लिए दशमलव विभाजक की भी आवश्यकता नहीं है - यानी 1M == 1.0M और दोनों decimal एस हैं।

+0

धन्यवाद की है इसके लिए बहुत कुछ। मुझे वेब सेवा के माध्यम से एक्सएमएल में "100000000000023063.0" मान मिल रहा है। मैं फिर इसे पार्स करता हूं और अपनी कक्षा बनाने और JSON.NET का उपयोग करके कक्षा को क्रमबद्ध करने और इसे भविष्य के संदर्भ के लिए डेटाबेस में संग्रहीत करता हूं। ऐसा लगता है कि JSON.NET 4.0 समस्या को दशमलव परिशुद्धता के साथ हल करता है। – LozzaDude

1

यह इसलिए है क्योंकि आप एक दशमलव को एक डबल कास्ट कर रहे हैं आप एक दशमलव के रूप में मूल्य को परिभाषित किया जाना चाहिए, जबकि: IE

var q = 100000000000023063.0M; 

एम प्रत्यय इंगित करता है कि संख्यात्मक निरंतर प्रकार दशमलव