我将用户输入的数字定义为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'。例如,在Mark Summerfield关于Go的书中,“浮点数用小数点写成......” – Zeynel
我认为@FUZxxl试图说的是“1”可以完美地表示为浮点数,即'1.0'。 '%f'格式应该读取包含小数点的浮点数。这可能是一个方便的事情,因为如果所有的需求都是“1”,人们可能不想输入“1.0”,但是我会对包含实际证据的更完整的答案感兴趣;) – fresskoma