以下代碼在“ var a int = int(1.333) ”行上引發錯誤“常量截斷為整數”。我是 GO 新手,無法找出實際問題。package mainimport ( "fmt" "math")func main() { var x, y int = 3, 4 const k float64=2.2 var a int = int(1.333) var f float64 = math.Sqrt(float64(x*x+y*y)) var z uint = uint(f) fmt.Println(x, y, z,a)}
1 回答

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
常量的轉換遵循與非常量的轉換不同的規則。
第一個非常數:
數值類型之間的轉換
對于非常量數值的轉換,適用以下規則:
...
將浮點數轉換為整數時,小數部分將被丟棄(向零截斷)。
...
所以這是可能的:
var?f?=?float64(1.333) var?i?=?int(f)
現在常數:
如果 x 可以用 T 的值表示,則常量值 x 可以轉換為類型T。
然后,在文檔中,有一個示例表達式列表,其中之一是:
int(1.2)?//?illegal:?1.2?cannot?be?represented?as?an?int
論代表性
如果滿足以下條件之一,則常量 x 可由類型 T 的值表示:
x 位于由 T 確定的值集中。
T 是浮點類型,x 可以舍入到 T 的精度而不會溢出。舍入使用 IEEE 754 舍入到偶數規則,但 IEEE 負零進一步簡化為無符號零。請注意,常量值永遠不會導致 IEEE 負零、NaN 或無窮大。
T 是復數類型,x 的分量 real(x) 和 imag(x) 可通過 T 的分量類型(float32 或 float64)的值表示。
這 3 個條件都不適用于該表達式var a int = int(1.333)
,因此它是非法的。
- 1 回答
- 0 關注
- 172 瀏覽
添加回答
舉報
0/150
提交
取消