首頁 >後端開發 >Golang >Go - 切片中正數、負數和零數元素的比率

Go - 切片中正數、負數和零數元素的比率

王林
王林轉載
2024-02-06 11:15:07587瀏覽

Go - 切片中正数、负数和零数元素的比率

問題內容

我想顯示切片中正數、負數和零元素的比率。我需要 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

我做錯了什麼?


正確答案


您使用的是整數除法而不是浮點除法,浮點除法會丟棄餘數並僅傳回除法結果的整數部分。

由於negativeNumbertotalNumber 都是int32 類型,因此 NegativeNumber /totalNumber# 執行整數除法,即執行除法並傳回結果的下限(即0)。然後,當您使用 float32(負數/總數) 將其轉換為 float32 時,您會得到 0.0,這是預期的。

為了使用浮點除法,操作數之一必須是浮點型別。為此,您可以使用:float32(負數)/totalNumber

#

以上是Go - 切片中正數、負數和零數元素的比率的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除