Médio Go
Média de notas com float64
Enunciado
Leia duas notas como string ("7.5" e "8.0"), converta cada uma para float64 com strconv.ParseFloat, calcule a média e imprima com duas casas decimais no formato Média: 7.75.
Requisitos
- Usar
strconv.ParseFloatcom precisão 64. - Tratar o erro retornado pela conversão.
- Imprimir a média com duas casas decimais.
Código inicial
package main
import (
"fmt"
"strconv"
)
func main() {
n1 := "7.5"
n2 := "8.0"
// converta e calcule a média
}
Saída esperada
Média: 7.75
Ver dica
strconv.ParseFloat(s, 64) retorna (float64, error). Verifique o erro antes de usar o valor.
Mostrar solução
package main
import (
"fmt"
"strconv"
)
func main() {
n1 := "7.5"
n2 := "8.0"
v1, err1 := strconv.ParseFloat(n1, 64) // string -> float64
if err1 != nil {
fmt.Println("erro:", err1)
return
}
v2, err2 := strconv.ParseFloat(n2, 64)
if err2 != nil {
fmt.Println("erro:", err2)
return
}
media := (v1 + v2) / 2.0
fmt.Printf("Média: %.2f\n", media)
}
Passo a passo
- Definimos
n1en2comostring, simulando dados vindos de um arquivo ou formulário. strconv.ParseFloat(n1, 64)devolve umfloat64e umerror; o segundo argumento indica a precisão (64 bits).- Checamos
err1eerr2: se a conversão falhar, imprimimos o erro e saímos comreturn. - Somamos
v1 + v2(ambosfloat64) e dividimos por2.0— o literal2.0também éfloat64. fmt.Printfcom%.2fformata o resultado com exatamente duas casas decimais.
Por que funciona
Go exige conversão explícita: "7.5" é string, então precisa passar por ParseFloat antes de virar número. O retorno (valor, error) é o padrão idiomático de Go para operações que podem falhar. Ao tratar o erro, evitamos usar um valor inválido (que seria 0).
Erros comuns
- Ignorar o erro:
v1, _ := strconv.ParseFloat(n1, 64). Se a string for"abc",v1fica0e o resultado sai errado silenciosamente. - Usar
strconv.Atoipara"7.5": retorna erroinvalid syntax, poisAtoisó aceita inteiros. - Esquecer o
2.0e escrever(v1+v2)/2: o literal2éint, causando erro de tipos mistos.
Outra forma de resolver
Usar fmt.Sscanf para ler direto da string:
var v1, v2 float64
fmt.Sscanf(n1, "%f", &v1)
Útil quando o formato é simples e você quer evitar o tratamento de erro explícito.
Saída esperada
Média: 7.75