@cod1x_dev

Как правильно конвертировать тип данных?

Я новичок в Golang, изучаю второй день. Решил для практики сделать простенький калькулятор, но что-то не очень выходит.

Вот код самого калькулятора:

package main

import (
	"fmt"
	"os"
)

func main() {

	var what string
	var a float64
	var b float64

	fmt.Print("Выберите действие (+, -)")
	fmt.Fscan(os.Stdin, &what)

	fmt.Print("Введите первое значение: ")
	fmt.Fscan(os.Stdin, &a)

	fmt.Print("Введите второе значение: ")
	fmt.Fscan(os.Stdin, &b)

	var c float64
	if what == "+" {
		c = a + b
		fmt.Println("Результат: " + c)
	} else if what == "-" {
		c = a - b
		fmt.Println("Результат: " + c)
	}
}


Ошибка:
# command-line-arguments
.\calc.go:26:38: cannot use "Результат: " (type untyped string) as type float64
.\calc.go:29:38: cannot use "Результат: " (type untyped string) as type float64

Когда пытаюсь переменную "c" конвертировать в string то выбивает еще одну ошибку:
# command-line-arguments
.\calc.go:26:38: cannot use "Результат: " (type untyped string) as type float64
.\calc.go:29:38: cannot use "Результат: " (type untyped string) as type float64
  • Вопрос задан
  • 437 просмотров
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov Куратор тега Go
Senior software developer, system architect
Когда вы читаете данные из консоли - они приходят вам с типом string.
Т.е. сначала нужно считать в строку, а потом уже строку преобразовать во float.

Вот работающий пример
package main

import (
    "fmt"
    "log"
    "os"
    "strconv"
)

func main() {

    var what string
    var input string

    fmt.Print("Выберите действие (+, -)")
    fmt.Fscan(os.Stdin, &what)
    if what != `+` && what != `-` {
        log.Fatalf("действие указанно не корректно\n")
    }

    fmt.Print("Введите первое значение: ")
    fmt.Fscan(os.Stdin, &input)
    a, err := strconv.ParseFloat(input, 64)
    if err != nil {
        log.Fatalf("число указано не корректно: %v\n", err)
    }

    fmt.Print("Введите второе значение: ")
    fmt.Fscan(os.Stdin, &input)
    b, err := strconv.ParseFloat(input, 64)
    if err != nil {
        log.Fatalf("число указано не корректно: %v\n", err)
    }

    var c float64
    if what == "+" {
        c = a + b
    } else if what == "-" {
        c = a - b
    }

    fmt.Printf("Результат: %v\n", c)
}

Если это ваши первые шаги в программировании - лучше начать с Python, это ощутимо упростит старт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы