strconv.ParseFloat în Go

Citește un număr cu zecimale dintr-un text (cu punct, nu cu virgulă) ca float64.

Sintaxă
func ParseFloat(s string, bitSize int) (float64, error)

Ce face strconv.ParseFloat

strconv.ParseFloat(s, bitSize) transformă un text ca "3.14", "-0.5", "1e3" sau "Inf" într-un float64. bitSize este 64 pentru float64 sau 32 pentru float32 (rezultatul este tot float64, dar rotunjit la precizia lui float32).

Separatorul zecimal este punctul. Textele scrise în format românesc, cu virgulă ("12,50"), dau eroare: înlocuiește întâi virgula cu punct. Nu sunt acceptate nici spațiile sau unitățile ("12.5 lei").

Parametri

Parametru Descriere
s Textul cu numărul.
bitSize 64 sau 32.

Ce returnează

Numărul (float64) și eroarea (nil dacă a reușit).

Exemple

Exemplul 1: Formate acceptate și refuzate

package main

import (
	"fmt"
	"strconv"
)

func main() {
	for _, s := range []string{"3.14", "-0.5", "1e3", "Inf", ".5", "12,50", "12.5 lei"} {
		f, err := strconv.ParseFloat(s, 64)
		if err != nil {
			fmt.Printf("%-10q eroare: %v\n", s, err)
			continue
		}
		fmt.Printf("%-10q -> %v\n", s, f)
	}
}

Rezultat

"3.14"     -> 3.14
"-0.5"     -> -0.5
"1e3"      -> 1000
"Inf"      -> +Inf
".5"       -> 0.5
"12,50"    eroare: strconv.ParseFloat: parsing "12,50": invalid syntax
"12.5 lei" eroare: strconv.ParseFloat: parsing "12.5 lei": invalid syntax

Exemplul 2: Preț scris cu virgulă

package main

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

func main() {
	pretText := "12,50"
	pret, err := strconv.ParseFloat(strings.Replace(pretText, ",", ".", 1), 64)
	if err != nil {
		fmt.Println("preț invalid:", err)
		return
	}
	fmt.Printf("3 bucăți: %.2f lei\n", pret*3)

	f32, _ := strconv.ParseFloat("0.1", 32)
	fmt.Println("precizie float32:", f32)
}

Rezultat

3 bucăți: 37.50 lei
precizie float32: 0.10000000149011612

Greșeli frecvente

  • Citești prețuri scrise cu virgulă fără să le transformi: ParseFloat("12,50", 64) dă invalid syntax.
  • Folosești float64 pentru bani și aduni multe valori: apar erori de rotunjire (0.1 + 0.2 nu este exact 0.3). Pentru sume exacte lucrează în bani (întregi).

Comenzi înrudite

  • strconv.FormatFloat: Transformă un număr cu zecimale în text, cu formatul (‘f’, ‘e’, ‘g’) și numărul de zecimale dorite.
  • strconv.Atoi: Atoi transformă un text în număr întreg (int) și returnează eroare dacă nu se poate; Itoa face invers.
  • strconv.ParseInt: Citește un întreg dintr-un text, în orice bază (2–36) și verifică dacă încape într-un anumit număr de biți.