के बाद गोल करने के बिना डबल से दशमलव तक एक "उच्च" परिशुद्धता को दो से एक दशमलव तक परिवर्तित करते समय मैं कनवर्ट के साथ सटीकता खो देता हूं। गोल करने के कारण या तो (दशमलव) कास्टिंग।15 अंक
उदाहरण:
double d = -0.99999999999999956d;
decimal result = Convert.ToDecimal(d); // Result = -1
decimal result = (Decimal)(d); // Result = -1
दशमलव मान Convert.ToDecimal (डबल) द्वारा दिया 15 महत्वपूर्ण अंक की एक अधिकतम शामिल हैं। यदि मान पैरामीटर में 15 से अधिक महत्वपूर्ण अंक हैं, तो यह निकटतम के लिए गोल करने का उपयोग करके गोल किया जाता है।
इसलिए मैं आदेश मेरा सटीक रखने के लिए, मैं एक स्ट्रिंग के लिए अपनी डबल कन्वर्ट करने के लिए और फिर फोन Convert.ToDecimal (STRING):
decimal result = System.Convert.ToDecimal(d.ToString("G20")); // Result = -0.99999999999999956d
इस विधि काम कर रहा है, लेकिन मैं का उपयोग कर से बचने के लिए चाहते हैं 15 अंकों के बाद गोल किए बिना डबल से दशमलव को बदलने के लिए एक स्ट्रिंग चर?
क्या आप पहले से ही 'डी' के लिए सीमा जानते हैं? मैं छद्म कोड में कुछ हल्के समाधान प्रदान कर सकता हूं (मैं सी # में उन्हें लिखने के लिए पर्याप्त परिचित नहीं हूं) यदि आप जानते हैं कि 'डी' एक श्रेणी में है [-2..2] –
डी हमेशा के बीच होगा [- 1,1] –
मुझे लगता है कि यह कहीं और से आने वाला 'डबल' है जिसे आप नहीं बदल सकते हैं? यदि इसे गेट-गो ('दशमलव डी = -0.9 99 99 99 99 99 99 99 56 मीटर;') से दशमलव के रूप में घोषित किया गया है, तो यह सटीकता को बनाए रखता है। –