【问题标题】:wrong output golang, what is wrong in my go code? [closed]错误的输出golang,我的go代码有什么问题? [关闭]
【发布时间】:2021-04-13 16:39:59
【问题描述】:

输出应该是一个有效数字而不是 0,但我得到 0 作为输出, 我查看了每个地方,文档,stackoverflow,gfg,但我没有找到任何东西,请帮助我。 这是我的代码,请帮忙 (输出必须是'体重/(身高*身高)* 10000))

package main
import "fmt"

func calculate(height int, weight int) int{
    var x = height * height
    var y = weight
    var z = y / x
    var n = z * 10000
    return n
}

func main() {
    fmt.Println(calculate(160, 40))
}

【问题讨论】:

    标签: go math numbers glide-golang


    【解决方案1】:

    如果你有一个要求你的函数必须返回一个int,那么我认为你最简单的解决方案是这个

    func calculate(height, weight int) int {
       return weight * 10000 / (height * height)
    }
    

    利用乘法的交换性,即:

    weight / (height * height) * 10000

    等于(在理想的数学术语中)

    weight * 10000 / (height * height)

    当您使用整数时,第二个选项的优势就来了。当你在 Go 中除以整数时,你会丢失信息,因为你没有保留余数。由于我们假设您必须返回一个整数,因此您必须在某些时候由于除法而丢失信息。通过将除法操作移到操作顺序中的最后步,我们将这个错误的影响降到最低。

    【讨论】:

      【解决方案2】:

      你可以做一堆演员:

      package main
      
      func calculate(height, weight int) int {
         z := float32(weight) / float32(height * height)
         return int(z * 10000)
      }
      
      func main() {
         println(calculate(160, 40) == 15)
      }
      

      或者您可以将函数定义为采用浮点参数:

      package main
      
      func calculate(height, weight float32) float32 {
         x := height * height
         z := weight / x
         return z * 10000
      }
      
      func main() {
         println(calculate(160, 40) == 15.625)
      }
      

      https://golang.org/ref/spec#Arithmetic_operators

      【讨论】:

      • Go 中没有类型转换。这些是类型转换。
      猜你喜欢
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2023-04-01
      • 2013-03-06
      相关资源
      最近更新 更多