मुझे लगता है कि तुम सिर्फ तुम क्या सुझाव दिया करना चाहिए - दशमलव बिंदु के स्थिति का उपयोग करें। स्पष्ट कमी यह हो सकती है कि आपको अपने आप को अंतर्राष्ट्रीयकरण के बारे में सोचना होगा।
var decimalSeparator = NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator;
var position = input.IndexOf(decimalSeparator);
var precision = (position == -1) ? 0 : input.Length - position - 1;
// This may be quite unprecise.
var result = Math.Pow(0.1, precision);
एक और बात आप की कोशिश कर सकते है - Decimal
प्रकार भंडार एक आंतरिक precission मूल्य। इसलिए आप Deciml.TryParse()
का उपयोग कर सकते हैं और लौटाए गए मूल्य का निरीक्षण कर सकते हैं। शायद पार्सिंग एल्गोरिदम इनपुट की सटीकता को बनाए रखता है।
अंत में मैं फ्लोटिंग पॉइंट नंबरों का उपयोग करके कुछ कोशिश करने का सुझाव नहीं दूंगा। बस इनपुट को पार्स करने से पीछे की ओर शून्य के बारे में कोई जानकारी निकल जाएगी। इसलिए आपको उन्हें संरक्षित करने या समान चाल करने के लिए एक कलात्मक गैर-शून्य अंक जोड़ना होगा। आप सटीक मुद्दों में भाग सकते हैं। आखिर में एक फ्लोटिंग पॉइंट नंबर के आधार पर सटीकता को ढूंढना भी आसान नहीं है। मैं कुछ बदसूरत गणित या एक लूप को प्रत्येक पुनरावृत्ति के साथ गुणा करता हूं जब तक कि कोई अंशकालिक भाग न हो। और पाश नई precission मुद्दों के साथ आता है ...
अद्यतन
एक deciaml कार्यों में पार्स। विवरण के लिए से Decimal.GetBits()
।
var input = "123.4560";
var number = Decimal.Parse(input);
// Will be 4.
var precision = (Decimal.GetBits(number)[3] >> 16) & 0x000000FF;
Math.Pow(0.1, precision)
का उपयोग करके यहां सीधे आगे है।
स्रोत
2010-07-19 14:25:42
क्या आप सुनिश्चित हैं कि 4500 1 होगा, और 100 नहीं? – corsiKa
0.0 और 0.1 के मामले में अपेक्षित परिणाम क्या है? – user1785960
मेरे लिए यह भ्रमित प्रश्न है। आप दशमलव परिशुद्धता के लिए नहीं पूछते हैं। आप पूछते हैं: अंश भाग में अंकों की संख्या कैसे प्राप्त करें। 'दशमलव परिशुद्धता' के लिए परिभाषा मेरे लिए यहां है: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i16209 – user1785960