कस्टम सांकेतिक प्रारूप स्ट्रिंग हमेशा संकेत प्रदर्शित करने के लिए


188

क्या ऐसा कोई तरीका है जिससे मैं मानक या कस्टम सांख्यिक प्रारूप स्ट्रिंग को हमेशा संकेत देने के लिए निर्दिष्ट कर सकता हूं, यह + ve या -ve हो (हालाँकि यह शून्य के लिए क्या करना चाहिए, मुझे यकीन नहीं है!)

जवाबों:


296

हाँ तुम कर सकते हो। सशर्त स्वरूपण है। MSDN में सशर्त स्वरूपण देखें

उदाहरण के लिए:

string MyString = number.ToString("+0;-#");

जहां एक अर्धविराम द्वारा अलग किया गया प्रत्येक खंड सकारात्मक और नकारात्मक संख्याओं का प्रतिनिधित्व करता है

या:

string MyString = number.ToString("+#;-#;0");

यदि आप शून्य को प्लस चिन्ह नहीं रखना चाहते हैं।


1
एक बग तय किया जिससे नकारात्मक को एक ऋण नहीं मिला।
रोमन स्टार्कोव

आपका बहुत बहुत धन्यवाद! मैं एक घंटे के लिए मेरे सिर को काट रहा हूं ताकि यह पता लगाया जा सके कि '#' के बराबर क्या है - C # में प्रिंटफ का झंडा और आपने मुझे जवाब दिया।
rbaleksandar

4
के साथ +#;-#, मान 0 के लिए मुझे सिर्फ "+" मिलता है, कोई वास्तविक 0. नहीं है। मेरे लिए मैं 0 को "+0" के रूप में प्रकट करना चाहता हूं, इसलिए यह काम करता है +#;-#;+0:।
ओरियन एल्जेनिल

3
धन्यवाद! इसे मिलाकर ''बढ़िया काम करेंगे! इसे देखो Changes.ToString("'('#' ▲)';'('#' ▼)';''"):! इसने मुझे बहुत समय और सैकड़ों ifबयान दिए! :)
शहाब

1
@orionelenzil मुझे भी यही समस्या थी। आप भी कर सकते थे +0;-#इसके बजाय +#;-#;+0यह उत्तर मेरे लिए वास्तव में भ्रामक था।
कामिल सोजोट

56

खबरदार, नकारात्मक मान का उपयोग करते समय सावधान रहें, स्वचालित रूप से एक संकेत नहीं मिलता है। आपको करने की जरूरत है

string MyString = number.ToString("+#;-#;0");

जैसा कि दूसरों ने बताया, +0;-#आपको क्लीनर कोड के साथ एक ही परिणाम मिलता है।
एंड्रयू

32

आप स्ट्रिंग में फ़ॉर्मेट स्ट्रिंग्स का भी उपयोग कर सकते हैं। फ़र्मैट (); प्रारूप स्ट्रिंग को एक बृहदान्त्र के साथ सूचकांक से अलग किया जाता है (':')

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

संख्या {+1, -1, 0} के लिए यह देता है:

1, बल चिह्न +1, शून्य +1 के लिए कोई संकेत नहीं
, बल चिह्न -1, शून्य -1
0 के लिए कोई संकेत नहीं , बल चिह्न +0, शून्य पर कोई संकेत नहीं।

आप एक string.Formatही परिणाम प्राप्त करने के बजाय एक प्रक्षेपित स्ट्रिंग का उपयोग कर सकते हैं :

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

आपके उत्तर की अंतिम पंक्ति को "डिफ़ॉल्ट प्रारूप 0, बल चिह्न +, शून्य 0. के लिए कोई संकेत नहीं" कहना चाहिए। क्योंकि वह +#;-#मान 0 के लिए प्रारूप का वास्तविक परिणाम है
कामिल ज़ोट

धन्यवाद, कामिल - मुझे वह याद आया। मैंने अब बल चिह्न प्रारूप को ठीक कर लिया है: + #; - #; + 0 (के बजाय (# #; - #)
एडवर्ड

1
आप एक सरल प्रारूप के साथ बल संकेत व्यवहार प्राप्त कर सकते हैं +0;-#:। :)
एंड्रयू

@Andrew, वास्तव में, लेकिन मैं पसंद +#;-#;+0से अधिक +#;-#के रूप में इस यह स्पष्ट करता है कि 0 +0 के रूप में स्वरूपित किया जाएगा
एडवर्ड

10

अन्य उत्तरों के विपरीत ऐसा लगता है कि यदि आप +1 प्राप्त करना चाहते हैं, तो -1, +0 (तर्क 1, -1, 0 के लिए) आपको प्रारूप का उपयोग करने की आवश्यकता है:

String.Format("{0:+#;-#;+0}", 0));  // output: +0

या

String.Format("{0:+0;-#}", 0));  // output: +0

यदि आप इसका उपयोग करते हैं तो +#;-#यह 0 के लिए सिर्फ +(नहीं +0) प्रदर्शित करेगा ।

"#" कस्टम विनिर्देशक ( https://msdn.microsoft.com/en-us/library/0c899ak8.aspx पर )

ध्यान दें कि यह निर्दिष्टक कभी भी शून्य को प्रदर्शित नहीं करता है जो महत्वपूर्ण अंक नहीं है, भले ही स्ट्रिंग में शून्य एकमात्र अंक हो। यह शून्य को केवल तभी प्रदर्शित करेगा जब यह प्रदर्शित होने वाली संख्या में महत्वपूर्ण अंक हो।

कृपया यह भी ध्यान रखें कि यदि आपको किसी भी दशमलव सटीकता की आवश्यकता है, तो आपको इसे इस तरह निर्दिष्ट करना होगा:

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

या, यदि आप शून्य को हमेशा दिखाने के लिए नहीं चाहते हैं, तो जैसे:

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

1

किसी भी प्रकार की संख्यात्मक अभिव्यक्ति के लिए:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

तीन मामलों के लिए तीन भागों का उपयोग करें: सकारात्मक; नकारात्मक; शून्य

उदाहरण के अन्य पहलू:

  • शून्य पर हस्ताक्षर नहीं है। आप इसे कुछ भी दिखा सकते हैं, जैसे "शून्य"।

  • दशमलव बिंदु से पहले एक से कम पूर्ण मूल्यों का एक अग्रणी 0 होता है। स्वाद के लिए समायोजित करें।

  • अंकों की संख्या सबसे बड़े और सबसे छोटे निरपेक्ष दशमलव मानों के लिए है। स्वाद के लिए समायोजित करें।

  • दशांश बिंदु वर्ण संस्कृति-विशिष्ट है। .NET विकल्प।

  • समूहीकरण विभाजक वैकल्पिक हैं। चरित्र संस्कृति-विशिष्ट है। .NET विकल्प। (स्थिति भी संस्कृति-विशिष्ट हैं लेकिन यह केवल आपके प्रारूप स्ट्रिंग द्वारा नियंत्रित होती है।) आप प्रारूप के लिए विशेष वर्णों को छोड़कर किसी अन्य वर्ण का भी उपयोग करते हैं (जिसमें शामिल हैं; # 0)।


0

मैं टिप्पणी नहीं कर सकता तो मैं यहाँ एक उत्तर (पागल प्रतिष्ठा प्रणाली ....)

आप संख्या का उपयोग कर सकते हैं। String ("+ 0; - #") बहुत अच्छी तरह से UTC स्ट्रिंग टाइमफ़ॉर्मैट का उत्पादन करने के लिए

यहां PowerShell कोड दिखाया गया है

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

साभार @gcores https://stackoverflow.com/users/40256/gcores

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.