13

我有以下代码片段:

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 )
}

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

强制此除法为浮点的最佳/最优雅的方法是什么?

4

3 回答 3

16

Go 中的变量没有隐式类型转换,因此您必须转换为 float

fmt.Printf("%f", float32(a)/float32(b))

或者

fmt.Printf("%f", float32(a/b))

取决于你想要什么。还要检查一下float64——如果这能让你的船浮起来。

于 2013-12-13T16:40:06.180 回答
5

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

通常,如果您有一些非浮点数字类型(例如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。

于 2013-12-13T16:34:17.023 回答
-5

好吧,您应该将除法结果转换为浮点数

于 2013-12-13T16:33:54.543 回答