2012-09-27 15 views
6

में एक अंक वर्ण के संख्यात्मक मूल्य पाएं यूनिकोड वर्णों में कई श्रेणियां हैं जो अंकों का प्रतिनिधित्व करती हैं, जिसके लिए char.IsDigittrue लौटाता है। उदाहरण के लिए:सी #

bool b1 = char.IsDigit('\uFF12'); // full-width '2' -> true 
bool b2 = char.IsDigit('\u0665'); // true 
bool b3 = char.IsDigit('5');   // true 

मैं ऐसे पात्रों के संख्यात्मक समकक्ष प्राप्त करने का एक तरीका ढूंढ रहा हूं। ध्यान दें कि int.Parse(...) काम नहीं करता है, क्योंकि यह इनपुट वर्ण बेस यूनिकोड रेंज ('0' .. '9') में होने की अपेक्षा करता है।

यह जावा के Character.digit(...) व्यवहार के बराबर है।

चूंकि .NET Framework की char.IsDigit विधि सही ढंग से ऐसे वर्णों को अंकों के रूप में पहचानती है, तो मुझे उम्मीद है कि यह कार्यक्षमता भी हो, लेकिन मुझे कुछ भी नहीं मिला।

उत्तर

7

क्या आपने Char.GetNumericValue को आजमाया है? (मैं बस अपना Windows लैपटॉप बूट कर रहा हूँ जाँच करने के लिए :)

संपादित करें: बस की कोशिश की यह - लगता है कि यह काम करता है:

Console.WriteLine(char.GetNumericValue('\uFF12')); // 2 
Console.WriteLine(char.GetNumericValue('\u0665')); // 5 
Console.WriteLine(char.GetNumericValue('5'));  // 5 

नोट इस नहीं सिर्फ अंक शामिल नहीं है कि - यह किसी भी है संख्यात्मक चरित्र। हालांकि, IsDigit केवल अंकों के लिए है। उदाहरण के लिए:

// U+00BD is the Unicode "vulgar fraction one half" character 
Console.WriteLine(char.IsDigit('\u00bd'));   // False 
Console.WriteLine(char.GetNumericValue('\u00bd')); // 0.5 
+0

हाँ, बस इसे भी आजमाया। यह काम करता है, धन्यवाद। मैंने 'char' वर्ग पर पूरी विधियों की जांच की है, यह शर्मनाक है कि मैंने इसे अनदेखा कर दिया है ... – Iravanchi

+2

यहां तक ​​कि जॉन स्कीट के लैपटॉप भी तेजी से बूट होते हैं;) –