在Go语言中如何强制除法运算为浮点数?

v2g6jxz6  于 2023-02-14  发布在  Go
关注(0)|答案(4)|浏览(149)

我有以下代码片段:

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)
什么是最好/最优雅的方法来强制这个除法是浮点数?

vfh0ocws

vfh0ocws1#

no implicit type casts for variables in Go,所以必须转换为浮点型:

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

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

这取决于你想要什么。也可以看看float64--如果它能让你的船浮起来的话。

p8ekf7hl

p8ekf7hl2#

必须先将类型转换为浮点型。
通常,如果有一些非浮点型数值类型(例如int s)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。

camsedfj

camsedfj3#

我对ab的大值表示怀疑,因为即使它们的商不会溢出,到float32的单个转换也可能溢出。
然而,测试这个here时,golang编译器似乎足够聪明,可以使float32(a)/float32(b)“正常工作”,因此构造如下

f, _ := big.NewRat(a, b).Float32()

在这种情况下不必要。

nbnkbykc

nbnkbykc4#

那么你应该把除法的结果转换成float

相关问题