1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
事實(shí)并非如此。fmt.Println
只是讓它看起來(lái)更精確。Println
用于%g
浮點(diǎn)數(shù)和復(fù)數(shù)。文檔說(shuō)...
默認(rèn)精度... %g 它是唯一標(biāo)識(shí)該值所需的最小位數(shù)。
0.3 足以識(shí)別float32
.?但float64
更精確需要更多的數(shù)字。
我們可以使用fmt.Printf
和%0.20g
強(qiáng)制兩個(gè)數(shù)字顯示相同的精度。
f32 := float32(0.1) + float32(0.2)
f64 := float64(0.1) + float64(0.2)
fmt.Printf("%0.20g\n", f32)
fmt.Printf("%0.20g\n", f64)
0.30000001192092895508
0.30000000000000004441
float64更精確。兩者都不精確,因?yàn)檫@是浮點(diǎn)數(shù)的本質(zhì)。
我們可以用它strconv.FormatFloat
來(lái)看看這些數(shù)字到底是什么。
fmt.Println(strconv.FormatFloat(float64(f32), 'b', -1, 32))
fmt.Println(strconv.FormatFloat(f64, 'b', -1, 64))
10066330p-25
5404319552844596p-54
即10066330 * 2^-25和5404319552844596 * 2^-54。
- 1 回答
- 0 關(guān)注
- 139 瀏覽
添加回答
舉報(bào)