我想顯示切片中正數、負數和零元素的比率。我需要 float32 格式的比率。這是我的程式碼:
arr := []int32{-2, -1, 0, 1, 2} var negativenumber, positivenumber, zeronumber, totalnumber int32 var negativeratio, positiveratio, zeroratio float32 for i := 0; i < len(arr); i++ { totalnumber += 1 } for i := 0; i < len(arr); i++ { if arr[i] < 0 { negativenumber += 1 } else if arr[i] == 0 { zeronumber += 1 } else if arr[i] > 0 { positivenumber += 1 } } negativeratio = float32(negativenumber / totalnumber) zeroratio = float32(zeronumber / totalnumber) positiveratio = float32(positivenumber / totalnumber) fmt.printf("total number: %d\n", totalnumber) fmt.printf("positive number: %d\n", positivenumber) fmt.printf("negative number: %d\n", negativenumber) fmt.printf("zero number: %d\n", zeronumber) fmt.printf("positive ratio: %f\n", positiveratio) fmt.printf("negative ratio: %f\n", negativeratio) fmt.printf("zero ratio: %f\n", zeroratio)
但是,當我列印變數時,我得到的正數、負數和零數是正確的,但比率是錯誤的。這是輸出:
total number: 5 positive number: 2 negative number: 2 zero number: 1 positive ratio: 0.000000 negative ratio: 0.000000 zero ratio: 0.000000
我做錯了什麼?
您使用的是整數除法而不是浮點除法,浮點除法會丟棄餘數並僅傳回除法結果的整數部分。
由於negativeNumber
和totalNumber
都是int32
類型,因此 NegativeNumber /totalNumber
# 執行整數除法,即執行除法並傳回結果的下限(即0)。然後,當您使用 float32(負數/總數)
將其轉換為 float32
時,您會得到 0.0
,這是預期的。
為了使用浮點除法,操作數之一必須是浮點型別。為此,您可以使用:float32(負數)/totalNumber
以上是Go - 切片中正數、負數和零數元素的比率的詳細內容。更多資訊請關注PHP中文網其他相關文章!