Ce face strconv.Atoi
strconv.Atoi(s) (de la ASCII to integer) citește un număr întreg în baza 10 dintr-un text: "42" devine 42. Acceptă semn ("-7", "+7"), dar nu spații, puncte, virgule sau alte caractere. Dacă textul nu este un număr valid sau numărul nu încape în int, returnează o eroare de tip *strconv.NumError.
strconv.Itoa(i) face conversia inversă: 42 devine "42". Este echivalent cu strconv.FormatInt(int64(i), 10).
În Go nu poți aduna un text cu un număr ("Nota: " + 10 nu compilează) și nici nu poți converti cu string(10) sau int("10"): pentru asta există strconv.
Parametri
| Parametru | Descriere |
|---|---|
s |
La Atoi: textul de citit. |
i |
La Itoa: numărul de transformat. |
Ce returnează
Atoi: numărul și o eroare (nil dacă a reușit; altfel numărul este 0). Itoa: textul.
Exemple
Exemplul 1: Texte valide și invalide
package main
import (
"fmt"
"strconv"
)
func main() {
for _, s := range []string{"42", "-7", "+15", " 3", "12abc", "3.5", "99999999999999999999"} {
n, err := strconv.Atoi(s)
if err != nil {
fmt.Printf("%-24q eroare: %v\n", s, err)
continue
}
fmt.Printf("%-24q -> %d\n", s, n)
}
}
Rezultat
"42" -> 42
"-7" -> -7
"+15" -> 15
" 3" eroare: strconv.Atoi: parsing " 3": invalid syntax
"12abc" eroare: strconv.Atoi: parsing "12abc": invalid syntax
"3.5" eroare: strconv.Atoi: parsing "3.5": invalid syntax
"99999999999999999999" eroare: strconv.Atoi: parsing "99999999999999999999": value out of range
Exemplul 2: Citirea vârstei de la tastatură
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
in := bufio.NewReader(os.Stdin)
rand, _ := in.ReadString('\n')
varsta, err := strconv.Atoi(strings.TrimSpace(rand))
if err != nil {
fmt.Println("Te rog scrie un număr.")
return
}
fmt.Println("Peste 10 ani vei avea", varsta+10, "ani.")
}
Ce scrie utilizatorul (intrare)
25
Rezultat
Peste 10 ani vei avea 35 ani.
Exemplul 3: Itoa: număr lipit de text
package main
import (
"fmt"
"strconv"
)
func main() {
nota := 10
mesaj := "Nota Anei: " + strconv.Itoa(nota)
fmt.Println(mesaj)
fmt.Println(string(rune(65)), "nu este", strconv.Itoa(65))
}
Rezultat
Nota Anei: 10
A nu este 65
Greșeli frecvente
- Nu scoți spațiile și rândul nou din textul citit:
Atoi("25\n")dă eroare. Aplică întâistrings.TrimSpace. - Ignori eroarea cu
n, _ := strconv.Atoi(s). La un text greșit primești 0 și programul continuă ca și cum utilizatorul ar fi scris 0. - Folosești
string(n)în loc destrconv.Itoa(n): obții caracterul cu codul n (pentru 65, litera A), nu cifrele. - Folosești Atoi pentru numere cu zecimale (
"3.5"): dă eroare. Foloseștestrconv.ParseFloat.
Comenzi înrudite
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.strconv.ParseFloat: Citește un număr cu zecimale dintr-un text (cu punct, nu cu virgulă) ca float64.strconv.FormatInt: Transformă un întreg în text, în baza dorită (2–36): binar, octal, zecimal, hexazecimal.fmt.Sprint: Transformă valorile în text și îl returnează, fără să afișeze nimic; Sprintln adaugă spații și rând nou.fmt.Sscanf: Citește valori dintr-un text (string) în variabile, ca Scan, Scanf și Scanln, dar fără tastatură.