अपाचे कॉमन्स '१२३' न्यूमेरिक क्यों मानते हैं?


101

अपाचे कॉमन्स लैंग के दस्तावेज़ीकरण के अनुसार StringUtils.isNumeric(), स्ट्रिंग '१२३' संख्यात्मक है।

चूंकि मुझे विश्वास था कि यह प्रलेखन में एक गलती हो सकती है, इसलिए मैंने बयान को सत्यापित करने के लिए परीक्षण चलाए। मैंने पाया कि अपाचे कॉमन्स के अनुसार यह है सांख्यिक।

यह स्ट्रिंग न्यूमेरिक क्यों है? वे चरित्र क्या दर्शाते हैं?


61
शायद वे किसी भाषा में अंकों का प्रतिनिधित्व करते हैं। सभी भाषाएं अंकों का प्रतिनिधित्व करने के लिए 0 से 9 के प्रतीकों का उपयोग नहीं करती हैं।
एरन

165
ये 1, 2 और 3 हिंदी में हैं
Blip

11
आप पूर्णांक मान प्राप्त कर सकते हैं Integer.parseInt("१२३")
शक 1029

9
@ dan04 वे संख्याएँ नहीं हैं, वे अक्षर हैं जो विशेष स्थिरांक का प्रतिनिधित्व करने के लिए लोकप्रिय हैं। ⅯⅭऔर के बीच अंतर पर ध्यान दें MC
गेरिट

जवाबों:


198

क्योंकि उस "CharSequence में केवल यूनिकोड अंक होते हैं" (आपके जुड़े प्रलेखन को उद्धृत करते हुए )।

सभी पात्रों के लिए सच लौटा Character.isDigit:

कुछ यूनिकोड वर्ण श्रेणियाँ जिनमें अंक होते हैं:

  • '\ u0030' '\ u0039' के माध्यम से, ISO-LATIN-1 अंक ('0' '9') के माध्यम से
  • '\ u0669', अरबी-इंडिक अंकों के माध्यम से '
  • '\ u06F9' के माध्यम से '\ u06F9', विस्तारित अरबी-इंडिक अंक
  • देवनागरी अंकों के माध्यम से '\ u0966'
  • '\ uFF10' 'पूर्णांक अंकों' के माध्यम से '

कई अन्य वर्ण श्रेणियों में भी अंक होते हैं।

१२३ देवनागरी अंक हैं:


11
@ जोकर_vD अच्छी तरह से, आपने निर्दिष्ट नहीं किया है कि कौन सा अधिभार है, हां, निश्चित Integer.parseInt("222", 2):।
एंडी टर्नर

4
@ जोकर_vD यह कठिन भी नहीं है; कई असमर्थित भाषाएं हैं। यदि ऐसा है, तो भी चिनिस है 亿, जो 10 ^ 8 का प्रतिनिधित्व करता है -> 3 की शक्ति के कारण यह अतिप्रवाह होगा। अंक प्रणाली की सूची
सेड्रिक रीचेनबाक

13
@CedricReichenbach: इसमें महत्वपूर्ण अंतर यह है कि जब ric संख्यात्मक होता है (Numeric_Type के गैर-गैर मानों में से एक होने के मानकों द्वारा, इस मामले में Numeric_Type = Numeric), तो यह किसी भी प्रकार का अंक है । (यहां तक ​​कि अगर यह था, तो आप इसे 3 की शक्ति पर नहीं ले जाएंगे; आप मूलांक को विभिन्न शक्तियों में बढ़ाएंगे , अंक नहीं ।) parseIntअंकों की आवश्यकता है, और शायद भ्रमित, isNumericइस प्रश्न में विधि दशमलव अंकों के पात्रों के लिए परीक्षण करती है ( संख्यात्मक वर्णों की किसी भी व्यापक श्रेणी के बजाय General_Category = Decimal_Number)।
user2357112

10
देवांगरी अंकों का पूरा सेट है ०१२३४५६७८९
dan04

2
@ v7d8dpo4 (s) उन्होंने पूछा कि क्या Integer.parseInt()3-वर्ण संख्यात्मक इनपुट स्ट्रिंग के लिए अपवाद फेंकने का एक तरीका था ।
एंडी टर्नर

59

प्रतीक २२३ नेपाली भाषा या किसी अन्य भाषा जैसे कि देवनागरी लिपि, जैसे कि हिंदी, गुजराती, और इसी तरह की अन्य भाषाओं के लिए १२३ के समान है , और इसलिए यह अपाचे कॉमन्स के लिए एक संख्या है।


3
यह बात लगभग अरबी अंकों में "123" जैसी दिखती है।
Panzercrisis

41
अरबों ने भारतीयों से अपने अंक प्राप्त किए।

5
@ वराह अरबी संख्या 1-9 है, जैसा कि आमतौर पर नहीं सोचा गया है।
मारून

26

आप Character#getTypeचरित्र की सामान्य श्रेणी की जांच करने के लिए उपयोग कर सकते हैं :

System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType('१'));

यह प्रिंट करेगा true, जो एक "सबूत" है कि '1' एक अंक संख्या है

अब '1' वर्ण के यूनिकोड मान की जांच करते हैं:

System.out.println(Integer.toHexString('१'));
// 967

यह संख्या देवनागरी अंकों की सीमा पर है - जो है: के \u0966माध्यम से \u096F

भी आज़माएं:

Character.UnicodeBlock block = Character.UnicodeBlock.of('१');
System.out.println(block.toString());
// DEVANAGARI

देवनागरी है:

भारत और नेपाल की एक अबुगिदा (अल्फासिलरी) वर्णमाला है

"१२३" एक "१२३" (बेसिक लैटिन यूनिकोड) है।

पढ़ना:


1
यह अधिक महत्वपूर्ण है कि वे उस प्रकार DECIMAL_DIGIT_NUMBERसे हैं जैसे वे DEVANAGARIब्लॉक में हैं। उस ब्लॉक में भी गैर-अंक पत्र हैं।
एंडी टर्नर

23

यदि आप कभी जानना चाहते हैं कि किसी विशेष "चरित्र" में क्या गुण हैं (और काफी कुछ हैं), सीधे स्रोत पर जाएं: Unwode.org । उनके पास अनुसंधान उपकरण हैं जो आपको सबसे अधिक कुछ दिखा सकते हैं जिन्हें आप जानना चाहते हैं।

  • यदि आप किसी विशिष्ट वर्ण के सभी गुण देखना चाहते हैं, तो निम्न प्रयास करें:

    http://unicode.org/cldr/utility/character.jsp?a=1

    या:

    http://unicode.org/cldr/utility/character.jsp?a=%E0%A5%A7

  • यदि आप "दशमलव अंकों" के रूप में वर्गीकृत सभी वर्णों को देखना चाहते हैं (यानी 9 के माध्यम से 0 की संख्या के साथ), तो निम्न प्रयास करें:

    http://unicode.org/cldr/utility/list-unicodeset.jsp?a=9:Numeric_Type=Decimal:]
    (550 कोड अंक - वर्तमान में यूनिकोड 9.0 के रूप में)

  • यदि आप सभी वर्णों को "गैर-दशमलव अंकों की संख्या" के रूप में वर्गीकृत करते हुए देखना चाहते हैं (यानी भिन्न, परिचालित, आदि), तो निम्न प्रयास करें:

    http://unicode.org/cldr/utility/list-unicodeset.jsp?a=I:Numeric_Type=Numeric:]
    (836 कोड अंक - वर्तमान में यूनिकोड 9.0 के रूप में)

  • यदि आप सभी वर्णों को "दशमलव अंक" (अर्थात 9 के माध्यम से 0 के संख्या मान के साथ) के रूप में वर्गीकृत देखना चाहते हैं, लेकिन केवल यूनिकोड 6.0 (जो .NET उपयोग करता है) के माध्यम से , निम्नलिखित प्रयास करें:

    http://unicode.org/cldr/utility/list-unicodeset.jsp?a=P:Numeric_Type=Decimal:आईडी%26 [:Age=6.0]]
    (420 कोड अंक - और नहीं बदलना चाहिए)

  • यदि आप सभी वर्णों को "दशमलव अंक" (यानी 9 के माध्यम से 0 के संख्या मान के साथ) के रूप में वर्गीकृत देखना चाहते हैं, लेकिन केवल यूनिकोड 6.0 (जो .NET उपयोग करता है) के माध्यम से, और केवल बेस-बहुभाषी विमान / कोई अनुपूरक वर्ण में नहीं। कोड प्वाइंट 65535 / U + 0xFFFF के ऊपर कुछ भी नहीं) , निम्नलिखित प्रयास करें:

    http://unicode.org/cldr/utility/list-unicodeset.jsp?a=P:Numeric_Type=Decimal:iding%26 [:Age=6.0: ग्रेडिंग%26 ]:bmp=Yes]]
    (350 कोड पॉइंट्स - - और नहीं बदलना चाहिए)

KEEP IN MIND: यूनिकोड कंसोर्टियम एक विनिर्देशन का उत्पादन करता है, न कि सॉफ्टवेयर का। इसका मतलब यह है कि यह प्रत्येक सॉफ़्टवेयर विक्रेता पर निर्भर है कि वे विनिर्देश को ठीक से लागू कर सकें । तो जैसे HTML, जावास्क्रिप्ट, CSS, SQL, आदि विभिन्न प्लेटफार्मों, भाषाओं, और इसी तरह के बीच भिन्नता है। उदाहरण के लिए, मैंने Microsoft के .NET फ्रेमवर्क में एक बग पाया जिसमें लैटिन अक्षर A-Zऔर a-z- 0x24E9 के माध्यम से कोड अंक 0x24B6 - ठीक से रजिस्टर नहीं किया जा रहा है char.IsLetter = true( बग रिपोर्ट यहाँ )। और इससे संबंधित कार्यक्षमता में अप्रत्याशित व्यवहार होता है, जैसे कि TextInfo.ToTitleCase()विधि को कॉल करते समय ( बग रिपोर्ट यहां )।


1
महान संदर्भ! (हालांकि वे मुझे आश्चर्यचकित करते हैं कि क्या यूनिकोड शीर्ष पर चला गया है!)
PJTraill

1
यदि आप इस प्रकार का संदर्भ स्थानीय रूप से उपलब्ध कराना चाहते हैं, तो आप यूनिप्रॉप्स स्थापित कर सकते हैं ।
टीआरजी

2
@TRiG उल्लेख करने के लिए धन्यवाद। दिलचस्प उपयोगिता। यह पहले 3 लिंक (मूल सेट) में दिखाई गई कार्यक्षमता में से कुछ को कवर करता है, लेकिन मैंने अभी कुछ अतिरिक्त लिंक शामिल करने के लिए अपने उत्तर को अपडेट किया है जो कि अधिक उन्नत प्रश्न दिखाता है जो कि यूनिकोड.ओआर पर किया जा सकता है जो मुझे संभव नहीं दिखता है के माध्यम से uniprops। इसके अलावा, ऐसा प्रतीत होता है कि unipropsयूनिकोड जारी संस्करण 9.0 इस पिछले जून के पीछे एक संस्करण है।
सोलोमन रटज़की

19

प्रतीक '१२३' वास्तव में हिंदी भाषा से लिया गया है (मूल रूप से संस्कृत भाषा यानी देवनागिरी से) जो सांख्यिक मूल्यों का प्रतिनिधित्व करते हैं जैसे:

1 का प्रतिनिधित्व करते हैं

२ प्रतिनिधित्व २

और बुद्धिमान की तरह


4
सुधार: प्रतीक '123' वास्तव में से प्राप्त कर रहे संस्कृत भाषा (यानी, अन्य पोस्टर के रूप में Devanagiri स्क्रिप्ट का उल्लेख किया है)
हैप्पी ग्रीन बच्चे Naps

मुझे यह जानकर आश्चर्य हुआ कि हाल ही में देवनागरी ने अपना वर्तमान रूप कैसे लिया - संस्कृत के संहिताबद्ध होने के कई सदियों बाद! इसलिए मुझे इस दावे पर संदेह है कि अंक सामान्य रूप से भारतीय संस्कृति की तुलना में संस्कृत से अधिक हैं।
एंटोन शेरवुड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.