Я определяю номер для ввода пользователем как var input float64
, и я ввожу целое число, и я ожидаю получить ошибку, но получаю err = <nil>
. Что мне не хватает?Почему нет ошибки несоответствия типа?
package main
import (
"fmt"
)
func main() {
var input float64
fmt.Print("Enter a number:")
n, err := fmt.Scanf("%f\n", &input)
fmt.Printf("err = %v\n", err)
if err != nil {
fmt.Printf("%v is not a float - exiting with error\n", input, err)
return
}
fmt.Printf("n is %v:", n)
}
Это выход:
C:\Go\src\play\exercise>go run exercise2.go
Enter a number to take its square root: 1
err = <nil>
n is 1:
Вы знаете, что 1 является вполне допустимым числом с плавающей запятой? – fuz
Нет, я не знал. Я думал, что числа с плавающей запятой должны быть записаны с десятичной точкой. То, как я думал, '1.0' не должно выдавать ошибку, но' 1' должно. Например, в книге Марка Саммерфилда о Go «числа с плавающей запятой пишутся с десятичной точкой ...» – Zeynel
Я думаю, что то, что @FUZxxl пыталось сказать, состоит в том, что «1» отлично представляет собой число с плавающей запятой, а именно «1.0». Формат '% f' должен читать числа с плавающей запятой, содержащие десятичную точку. Это, вероятно, удобная вещь, потому что люди могут не захотеть набирать «1.0», если все нужно «1», но мне будет интересен более полный ответ, содержащий фактические данные;) – fresskoma