2 回答

TA貢獻1812條經(jīng)驗 獲得超5個贊
根據(jù)規(guī)格:
常量表達式總是精確求值;中間值和常量本身可能需要比語言中任何預(yù)先聲明的類型支持的精度大得多的精度。
自從
912 * 0.01
是一個常量表達式,它被精確地計算。因此,寫作fmt.Println(912 * 0.01)
與寫作具有相同的效果fmt.Println(9.12)
。當您固定912
到 時float64
,浮點乘法的另一個操作數(shù)也隱式固定到float64
。因此,表達式的float64(912) * 0.01
行為類似于float64(912) * float64(0.01)
。0.01 在 a 中不能完全表示float64
,因此精度在與第一個示例float64(912 * 0.01)
中的參數(shù)中出現(xiàn)的表達式不同的地方丟失fmt.Println()
,解釋了不同的結(jié)果。

TA貢獻1890條經(jīng)驗 獲得超9個贊
輸出不同的原因是在第一種情況下912 * 0.01
是任意精度的2個無類型常量值的乘法,并且只有float64
在將值傳遞給時才將結(jié)果轉(zhuǎn)換為Println()
。
在第二種情況下,float64(912) * 0.01
首先912
轉(zhuǎn)換為float64
,然后將無類型常量0.01
轉(zhuǎn)換為float64
并且這兩個值float64
相乘,這不是任意精度,并且不會給出確切的結(jié)果。
筆記:
在第一種情況下,結(jié)果將float64
在傳遞給 時轉(zhuǎn)換為Println()
:
fmt.Printf("%T?%v\n",?912?*?0.01,?912?*?0.01)
輸出:
float64?9.12
- 2 回答
- 0 關(guān)注
- 226 瀏覽
添加回答
舉報