गोलंग: छपाई करते समय शून्य के साथ एक संख्या को कैसे पैड करें?


99

मैं एक संख्या कैसे प्रिंट कर सकता हूं या इसे निश्चित चौड़ाई बनाने के लिए शून्य पैडिंग के साथ एक स्ट्रिंग बना सकता हूं?

उदाहरण के लिए, यदि मेरे पास संख्या है 12और मैं इसे बनाना चाहता हूं 000012

जवाबों:


176

Fmt पैकेज आपके लिए यह कर सकता है:

fmt.Printf("|%06d|%6d|\n", 12, 345)

0% 06d में ध्यान दें, जो इसे 6 की चौड़ाई का बना देगा और इसे शून्य के साथ पैड कर देगा। दूसरा एक रिक्त स्थान के साथ पैड होगा।

आप इसे यहां क्रिया में देख सकते हैं: http://play.golang.org/p/cinDspMccp


2
क्या होगा यदि मैं चाहता हूं कि पैड सही हो? ध्वज का उपयोग करने से -केवल स्थान मिलता है, मुझे शून्य की आवश्यकता है।
मजीदरीफ

5
यदि आप बाद में साथ काम करने के लिए एक स्ट्रिंग चाहते हैं SprintfPrintf
ओलिवरपूल

42

का प्रयोग करें Printfसे समारोह fmt पैकेज एक साथ widthकी 6और गद्दी चरित्र 0:

import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'

widthपूर्णांक निर्दिष्ट करने से पहले प्रारूप निर्दिष्ट ('क्रिया)) को निर्धारित करके कार्यों को सेट करना :

fmt.Printf("%d", 12)   // Uses default width,                          prints '12'
fmt.Printf("%6d", 12)  // Uses a width of 6 and left pads with spaces, prints '    12'

गोलंग (और अधिकांश अन्य भाषाओं) द्वारा समर्थित एकमात्र पैडिंग पात्र रिक्त स्थान और हैं 0:

fmt.Printf("%6d", 12)   // Default padding is spaces, prints '    12'
fmt.Printf("%06d", 12)  // Change to 0 padding,       prints '000012'

यह संभव है कि ऋण को घटाकर छपाई को सही ठहराया जाए -:

fmt.Printf("%-6d", 12)   // Padding right-justified, prints '12    '

फ़्लोटिंग पॉइंट नंबरों के लिए सावधान रहें कि चौड़ाई में संपूर्ण प्रारूप स्ट्रिंग शामिल है:

fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)

यह ध्यान रखना उपयोगी है कि चौड़ाई *को एक संख्या के बजाय का उपयोग करके और intपैरामीटर के रूप में चौड़ाई को पार करके प्रोग्रामेटिक रूप से सेट किया जा सकता है :

myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before

यह उदाहरण के लिए उपयोगी हो सकता है यदि आप जो सबसे बड़ा मूल्य प्रिंट करना चाहते हैं वह केवल रनटाइम पर जाना जाता है ( maxValनिम्नलिखित उदाहरण में कहा जाता है):

myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)

अंतिम, यदि आप प्रिंट नहीं करना चाहते हैं stdoutलेकिन स्ट्रिंग लौटाते हैं, तो समान मापदंडों के साथ fmt पैकेजSprintf से भी उपयोग करें :

s := fmt.Sprintf("%06d", 12) // returns '000012' as a String

29

इसे प्राप्त करने का एक सरल तरीका है। उपयोग

func padNumberWithZero(value uint32) string {
    return fmt.Sprintf("%02d", value)
}

fmt.Sprintfप्रारूप और कहीं भी इसे मुद्रित किए बिना एक स्ट्रिंग लौटाता है। यहां %02dकहा गया है कि मूल्य के लिए बाईं ओर पैड शून्य, जिसके पास अंकों की 2 संख्या है। यदि दिए गए मान में 2 या अधिक अंक हैं, तो यह पैड नहीं होगा। उदाहरण के लिए:

  • यदि इनपुट 1 है, तो आउटपुट 01 होगा।
  • यदि इनपुट 12 है, तो आउटपुट 12 होगा।
  • यदि इनपुट 1992 है, तो आउटपुट 1992 होगा।

आप %03dअधिक शून्य पैडिंग के लिए उपयोग या अधिक कर सकते हैं ।


10

प्रश्न " गो लैंग में मुद्रण प्रारूप की सूची " हमें याद दिलाती है कि झंडा भी है:

- बाईं ओर दाईं ओर रिक्त स्थान के साथ पैड (बाएं-क्षेत्र को औचित्य दें)


DaddyOh/golang-samples/pad.goयदि आप अन्य स्ट्रिंग अनुक्रमों (' 0' या ' ' से अधिक जटिल ) के साथ पैड करना चाहते हैं, तो आप अधिक पैडिंग उदाहरण देख सकते हैं :

  • leftPad(s string, padStr string, pLen int)
  • rightPad(s string, padStr string, pLen int)
  • leftPad2Len(s string, padStr string, overallLen int)
  • rightPad2Len(s string, padStr string, overallLen int)

देखें play.golang.org:

1234567890

leftPad(str, "*", 3)  ***1234567890
leftPad2Len(str, "*-", 13)  -*-1234567890
leftPad2Len(str, "*-", 14)  *-*-1234567890
leftPad2Len(str, "*", 14)  ****1234567890
leftPad2Len(str, "*-x", 14)  x*-x1234567890
leftPad2Len(str, "ABCDE", 14)  BCDE1234567890
leftPad2Len(str, "ABCDE", 4)  7890
rightPad(str, "*", 3)  1234567890***
rightPad(str, "*!", 3)  1234567890*!*!*!
rightPad2Len(str, "*-", 13)  1234567890*-*
rightPad2Len(str, "*-", 14)  1234567890*-*-
rightPad2Len(str, "*", 14)  1234567890****
rightPad2Len(str, "*-x", 14)  1234567890*-x*
rightPad2Len(str, "ABCDE", 14)  1234567890ABCD
rightPad2Len(str, "ABCDE", 4)  1234

एरिक पामर ने अपने रेपो को गोलंग नमूनों के साथ हटा दिया ताकि लिंक अब काम न करे।
कोनस्टेंटिन अजीज़ोव

1
@KonstantinAzizov अच्छी बात है। मैंने उस लिंक को पुनर्स्थापित कर दिया है। की तरह।
VonC

3
func lpad(s string,pad string, plength int)string{
    for i:=len(s);i<plength;i++{
        s=pad+s
    }
    return s
}

lpad ("3", "0", 2) परिणाम: "03"

lpad ("12", "0", 6) परिणाम: "000012"

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