如何强制除法在Go中浮点?

Cro*_*roo 7 go command-line-arguments floating-point-conversion

我有以下代码片段:

package main

import("fmt";"flag")

func main() {
    var a = flag.Int("a",0,"divident")
    var b = flag.Int("b",1,"divisor")
    flag.Parse()

    fmt.Printf("%f",*a / *b )
}
Run Code Online (Sandbox Code Playgroud)

对于-a 3和-b 2命令行参数,输出为: %!f(int=1)

强迫这种划分成为浮点的最佳/最优雅的方法是什么?

bis*_*hop 10

Go没有对变量进行隐式类型转换,因此必须转换为float:

fmt.Printf("%f", float32(a)/float32(b))
Run Code Online (Sandbox Code Playgroud)

要么

fmt.Printf("%f", float32(a/b))
Run Code Online (Sandbox Code Playgroud)

取决于你想要什么.还可以看看float64- 如果它漂浮在您的船上.

  • 您的第二个选项不会导致浮点除法:它只是将整数除法的结果转换为浮点. (4认同)

Lin*_*ope 8

您必须首先将类型转换为浮点数。

一般来说,如果您有一些非浮点数字类型(例如ints)ab,为了获得您使用的浮点除法float32(a)/ float32(b)(或float64视情况而定)。如果您想将浮点数视为整数或将整数视为复数转换操作数,这也适用于任何其他数字类型。在这种情况下,如果 a 为 3,b 为 2,float32(a)/float32(b)则为 1.5。

如果您希望进行整数除法,但结果是浮点型,则将结果转换为float32(a/b)。在本例中,如果 a 为 3,b 为 2,则float32(a/b)结果为 1.0。