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.ParseFloat com 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

  1. Definimos n1 e n2 como string, simulando dados vindos de um arquivo ou formulário.
  2. strconv.ParseFloat(n1, 64) devolve um float64 e um error; o segundo argumento indica a precisão (64 bits).
  3. Checamos err1 e err2: se a conversão falhar, imprimimos o erro e saímos com return.
  4. Somamos v1 + v2 (ambos float64) e dividimos por 2.0 — o literal 2.0 também é float64.
  5. fmt.Printf com %.2f formata 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", v1 fica 0 e o resultado sai errado silenciosamente.
  • Usar strconv.Atoi para "7.5": retorna erro invalid syntax, pois Atoi só aceita inteiros.
  • Esquecer o 2.0 e escrever (v1+v2)/2: o literal 2 é 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