strconv.FormatFloat în Go

Transformă un număr cu zecimale în text, cu formatul ('f', 'e', 'g') și numărul de zecimale dorite.

Sintaxă
func FormatFloat(f float64, fmt byte, prec, bitSize int) string

Ce face strconv.FormatFloat

strconv.FormatFloat(f, fmt, prec, bitSize) scrie un float64 ca text. fmt este formatul: 'f' (zecimal obișnuit, 123.46), 'e' (științific, 1.23e+02), 'g' (alege singur forma mai scurtă).

prec este numărul de zecimale (la 'f' și 'e') sau de cifre semnificative (la 'g'). Valoarea specială -1 înseamnă „cele mai puține cifre care păstrează exact numărul”. bitSize este 64 pentru float64 și 32 pentru float32.

Rezultatul folosește punctul ca separator zecimal. Pentru formatul românesc (12,50) înlocuiește punctul după formatare.

Parametri

Parametru Descriere
f Numărul.
fmt Formatul: 'f', 'e', 'E', 'g', 'G', 'b', 'x'.
prec Zecimalele sau cifrele; -1 pentru minimul exact.
bitSize 64 sau 32.

Ce returnează

Textul numărului.

Exemple

Exemplul 1: Formate și precizii

package main

import (
	"fmt"
	"strconv"
)

func main() {
	x := 1234.5678
	fmt.Println(strconv.FormatFloat(x, 'f', 2, 64))
	fmt.Println(strconv.FormatFloat(x, 'f', 0, 64))
	fmt.Println(strconv.FormatFloat(x, 'e', 3, 64))
	fmt.Println(strconv.FormatFloat(x, 'g', -1, 64))
	fmt.Println(strconv.FormatFloat(0.1+0.2, 'f', -1, 64))
	fmt.Println(strconv.FormatFloat(0.1, 'f', 20, 64))
}

Rezultat

1234.57
1235
1.235e+03
1234.5678
0.3
0.10000000000000000555

Exemplul 2: Preț în format românesc

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func lei(suma float64) string {
	return strings.Replace(strconv.FormatFloat(suma, 'f', 2, 64), ".", ",", 1) + " lei"
}

func main() {
	fmt.Println(lei(12.5))
	fmt.Println(lei(3 * 4.99))
}

Rezultat

12,50 lei
14,97 lei

Greșeli frecvente

  • Te aștepți ca 0.1 + 0.2 să fie afișat 0.3 cu precizia -1. Precizia -1 arată valoarea exactă păstrată în memorie: 0.30000000000000004. Pentru afișare alege un număr fix de zecimale.
  • Dai formatul ca text ("f"). Este un byte, deci se scrie cu apostrofuri: 'f'.

Comenzi înrudite

  • strconv.ParseFloat: Citește un număr cu zecimale dintr-un text (cu punct, nu cu virgulă) ca float64.
  • fmt.Printf: Afișează text formatat cu %d, %s, %.2f etc.; Sprintf returnează textul, Fprintf îl scrie într-un fișier sau alt Writer.
  • strconv.AppendInt: Adaugă un număr sau un bool, scris ca text, la sfârșitul unui []byte, fără să creeze un text intermediar.