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
float64pentru 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.