運行這段代碼,看看我的意思是:Go Playground demo of issue這是strconv.ParseFloat()行爲預期還是錯誤?我怎樣才能解決它?
package main
import (
"fmt"
"strconv"
)
func main() {
// From https://golang.org/src/math/const.go
var SmallestNonzeroFloat64AsString string = "4.940656458412465441765687928682213723651e-324"
var SmallestNonzeroFloat64 float64
var err error
SmallestNonzeroFloat64, err = strconv.ParseFloat(SmallestNonzeroFloat64AsString, 64)
if err != nil {
panic(err)
}
fmt.Printf("SmallestNonzeroFloat64 = %g\n", SmallestNonzeroFloat64)
fmt.Printf("SmallestNonzeroFloat64 = %s\n", strconv.FormatFloat(SmallestNonzeroFloat64, 'f', -1, 64))
}
SmallestNonzeroFloat64
在math/const.go定義,我以爲它可以通過一個float64變量來表示。
但是,當它被解析爲float64與strconv.ParseFloat()
並打印strconv.FormatFloat()
結果是舍入。
而不是4.940656458412465441765687928682213723651e-324
我得到5e-324
(或它的非指數等價物,你可以在Go Playground結果中看到)。結果是四捨五入的。
有沒有辦法找回4.940656458412465441765687928682213723651e-324
?
或者它是一個錯誤?
明確。還有幾行代碼有助於確認:[link](https://play.golang.org/p/j-a-wSXIGt) – Koala3