Golang Padding String, Int or Float [SOLVED]


GO, GOLANG Solutions

Author: Tuan Nguyen
Reviewer: Deepak Prasad

How padding works in Golang?

We can use golang fmt.Printf in-built function to perform golang formatting. To format a string we will use %s while to format an integer we will use %d. You can read more these verbs at golang formatting verbs and fmt.Printf Documentation.

Following table explains the different Formatting Verb Modifiers

Modifier Description
+ This modifier (the plus sign) always prints a sign, positive or negative, for numeric values.
0 This modifier uses zeros, rather than spaces, as padding when the width is greater than the number of characters required to display the value.
- This modifier (the subtracts symbol) adds padding to the right of the number, rather than the left.

 

Example-1: Add padding in float numbers

In this examples we will use a float number and add some padded text towards left and right side of the float number:

package main

import "fmt"

func Printfln(template string, values ...interface{}) {
	fmt.Printf(template+"\n", values...)
}
func main() {
	number := 279.00
	Printfln("Sign: >>%+.2f<<", number)
	Printfln("Zeros for Padding: >>%010.2f<<", number)
	Printfln("Right Padding: >>%-8.2f<<", number)
	Printfln("Left Padding: >>%8.2f<<", number)
}

Output:

Sign: >>+279.00<<
Zeros for Padding: >>0000279.00<<
Right Padding: >>279.00  <<
Left Padding: >>  279.00<<

 

Example-2: Formatting fractional number widths for float numbers

The minimum width of the entire number includes decimal places and the decimal point. If it’s included, shorter numbers will be padded with spaces at the start until this width is reached. If it’s omitted, no spaces will ever be added.

The width after the decimal point is the number of decimal places to show. If a more precise number is given, it will be rounded (up or down) to fit in the given number of decimal places.

package main

import "fmt"

func main() {
	number := 12.3456
	fmt.Printf("%%7.3f: %7.3f\n", number) // Rounded to three places
	fmt.Printf("%%7.2f: %7.2f\n", number) // Rounded to two places
	fmt.Printf("%%7.1f: %7.1f\n", number) // Rounded to one place
	fmt.Printf("%%.1f: %.1f\n", number) // Rounded to one place, no padding
	fmt.Printf("%%.2f: %.2f\n", number) // Rounded to one place, no padding
}

Output:

%7.3f:  12.346
%7.2f:   12.35
%7.1f:    12.3
%.1f: 12.3
%.2f: 12.35

 

Example-3: Formatting integer number widths

The fmt package provides several ways to pad integers when formatting. The %d verb can be modified to add padding to the right or left of the integer. In either case, this padding is considered a minimum padding. If a number is larger than the minimum padding, the number is printed as it is.

package main

import "fmt"

func main() {
	d := 123

	fmt.Printf("Padded: '%5d'\n", d)           // left padding with 5 space character
	fmt.Printf("Padded: '%05d'\n", d)          // left padding with 5 '0' character
	fmt.Printf("Padded: '%5d'\n", 1234567890)  // number larger than padded value
	fmt.Printf("Padded: '%-5d'\n", d)          // print integer padded on the right
	fmt.Printf("Padded: '%-5d'\n", 1234567890) // number larger than padded value

}

Output

Padded: '  123'
Padded: '00123'
Padded: '1234567890'
Padded: '123  '
Padded: '1234567890'

 

Example-4: Golang string padding in the left

Here is an example to perform golang string padding on the left

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Printf("+%s+\n", strings.Repeat("-", 25))
	fmt.Printf("| %10s | %10s |\n", "Car", "Brand")
	fmt.Printf("|%s|\n", strings.Repeat("-", 25))
	fmt.Printf("| %10s | %10s |\n", "Baleno", "Nexa")
	fmt.Printf("+%s+\n", strings.Repeat("-", 25))
	fmt.Printf("| %10s | %10s |\n", "Nexon", "Tata")
	fmt.Printf("+%s+\n", strings.Repeat("-", 25))

}

Output:

+-------------------------+
|        Car |      Brand |
|-------------------------|
|     Baleno |       Nexa |
+-------------------------+
|      Nexon |       Tata |
+-------------------------+

 

Example-5: Golang string padding in the right

Here is another example to perform string padding towards the right side:

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Printf("+%s+\n", strings.Repeat("-", 25))
	fmt.Printf("| %-10s | %-10s |\n", "Car", "Brand")
	fmt.Printf("|%s|\n", strings.Repeat("-", 25))
	fmt.Printf("| %-10s | %-10s |\n", "Baleno", "Nexa")
	fmt.Printf("+%s+\n", strings.Repeat("-", 25))
	fmt.Printf("| %-10s | %-10s |\n", "Nexon", "Tata")
	fmt.Printf("+%s+\n", strings.Repeat("-", 25))

}

Output:

+-------------------------+
| Car        | Brand      |
|-------------------------|
| Baleno     | Nexa       |
+-------------------------+
| Nexon      | Tata       |
+-------------------------+

 

Example-6: Using golang.org/x/text/number package to pad an int

We can use the text/number package to pad an int. Here is an example of how to do that, here the pad character is 0, we can pad with any other characters if required:

import (
	"golang.org/x/text/language"
	"golang.org/x/text/message"
	"golang.org/x/text/number"
)

var fmt = message.NewPrinter(language.English)

func main() {
	num := number.Decimal(
		11, number.Pad('0'), number.FormatWidth(5),
	)
	fmt.Println(num) // 00011
}

Output:

00011

 

Example-7: Return int as string after padding

Use fmt.Sprintf instead of printing to the standard output if you want to return a string for later use:

package main

import "fmt"

func main() {
	var intSlice = []int{2, 20, 200, 236, 1104, 25363}
	for _, v := range intSlice {
		// return a string instead of printing it
		str := fmt.Sprintf("%05d", v)
		fmt.Println(str)
		fmt.Println("----")
	}
}

Output:

00002
----
00020
----
00200
----
00236
----
01104
----
25363
----

 

 

Summary

With the help of the fmt.Printf() and %d verb, we can easily pad 0 or space to an int or a string. The verb %05d means the fixed length is 5 and the pad character is 0 while %5d means the fixed length is 5 and the pad character is the space character. We also can pad space to the right of a string or an int by using (-) signal before the verb (%-5d). For padding int, we have a more powerful package text/number that formats numbers according to the customs of different locales. If you want to return the padded string, use the fmt.Sprintf function instead of the fmt.Printf.

 

References

How to pad a number with zeros when printing? - Stack Overflow
Usage example for Format method with leading zero padding
Golang fmt printf right padding - Stack Overflow

 

Views: 111
Tuan Nguyen

Tuan Nguyen

He is proficient in Golang, Python, Java, MongoDB, Selenium, Spring Boot, Kubernetes, Scrapy, API development, Docker, Data Scraping, PrimeFaces, Linux, Data Structures, and Data Mining. With expertise spanning these technologies, he develops robust solutions and implements efficient data processing and management strategies across various projects and platforms. You can connect with him on his LinkedIn profile.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com

Thank You for your support!!

Leave a Comment