我將用戶輸入的數字定義爲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