Golang strconv.FormatFloat
last modified April 20, 2025
This tutorial explains how to use the strconv.FormatFloat function in Go.
We'll cover float-to-string conversion basics with practical examples.
The strconv.FormatFloat function converts a floating-point number to a string. It provides precise control over formatting with various options.
FormatFloat takes four parameters: the float value, format byte, precision, and bitSize. It returns the formatted string representation of the floating-point number.
Basic strconv.FormatFloat Example
The simplest use of strconv.FormatFloat converts a float to a string.
Here we demonstrate basic conversion with default formatting.
package main
import (
"fmt"
"strconv"
)
func main() {
f := 123.456
s := strconv.FormatFloat(f, 'f', -1, 64)
fmt.Printf("Float %f converted to string '%s'\n", f, s)
}
We convert the float 123.456 to a string using 'f' format. The precision -1 means use the smallest number of digits necessary. 64 specifies float64 type.
Different Formatting Options
strconv.FormatFloat supports several format options. This example
shows different format specifiers in action.
package main
import (
"fmt"
"strconv"
)
func main() {
f := 123.456
fmt.Println("'f' format:", strconv.FormatFloat(f, 'f', 2, 64))
fmt.Println("'e' format:", strconv.FormatFloat(f, 'e', 3, 64))
fmt.Println("'E' format:", strconv.FormatFloat(f, 'E', 4, 64))
fmt.Println("'g' format:", strconv.FormatFloat(f, 'g', -1, 64))
fmt.Println("'G' format:", strconv.FormatFloat(f, 'G', 5, 64))
}
We demonstrate 'f' (decimal), 'e' (scientific), 'E' (scientific uppercase), 'g' (compact), and 'G' (compact uppercase) formats. Each has different output.
Controlling Precision
The precision parameter controls how many digits are displayed. This example shows how precision affects different format types.
package main
import (
"fmt"
"strconv"
)
func main() {
f := 123.456789
for i := 0; i <= 6; i++ {
fmt.Printf("Precision %d: %s\n",
i, strconv.FormatFloat(f, 'f', i, 64))
}
}
We gradually increase precision from 0 to 6 digits after the decimal point. Higher precision values show more digits, rounding when necessary.
Scientific Notation Formatting
Scientific notation is useful for very large or small numbers. This example demonstrates scientific formatting options.
package main
import (
"fmt"
"strconv"
)
func main() {
small := 0.0000123456
large := 1234567890.12345
fmt.Println("Small number:", strconv.FormatFloat(small, 'e', -1, 64))
fmt.Println("Large number:", strconv.FormatFloat(large, 'E', 3, 64))
}
We format a very small number with 'e' and a large number with 'E'. Scientific notation makes these values more readable and compact.
Compact Formatting with 'g'
The 'g' format chooses between decimal and scientific notation automatically. This example shows how it produces compact output.
package main
import (
"fmt"
"strconv"
)
func main() {
numbers := []float64{123.456, 123456789.0, 0.0000123456}
for _, num := range numbers {
fmt.Println(strconv.FormatFloat(num, 'g', -1, 64))
}
}
The 'g' format selects the most appropriate representation for each number. Medium-sized numbers use decimal, while very large/small use scientific.
Handling Special Float Values
strconv.FormatFloat correctly handles special float values like
Infinity and NaN. This example demonstrates their string representation.
package main
import (
"fmt"
"math"
"strconv"
)
func main() {
posInf := math.Inf(1)
negInf := math.Inf(-1)
nan := math.NaN()
fmt.Println("Positive Infinity:", strconv.FormatFloat(posInf, 'f', -1, 64))
fmt.Println("Negative Infinity:", strconv.FormatFloat(negInf, 'g', -1, 64))
fmt.Println("NaN:", strconv.FormatFloat(nan, 'e', -1, 64))
}
Special float values are converted to their standard string representations. Infinity becomes "+Inf" or "-Inf", while NaN becomes "NaN".
Practical Example: CSV Data Formatting
This practical example shows using FormatFloat to prepare float
data for CSV output with controlled precision.
package main
import (
"fmt"
"strconv"
)
type Measurement struct {
Name string
Value float64
}
func main() {
data := []Measurement{
{"Temperature", 23.4567},
{"Humidity", 45.6},
{"Pressure", 1013.2468},
}
for _, m := range data {
fmt.Printf("%s,%s\n",
m.Name, strconv.FormatFloat(m.Value, 'f', 2, 64))
}
}
We format measurement values with 2 decimal places for consistent CSV output. This ensures uniform precision in the generated data file.
Source
Go strconv package documentation
This tutorial covered the strconv.FormatFloat function in Go with
practical examples of float-to-string conversion in various scenarios.
Author
List all Go tutorials.