【问题标题】:how can I force division to be floating point in Go?如何在 Go 中强制除法为浮点数?
【发布时间】:2014-01-01 12:05:36
【问题描述】:

我有以下代码sn-p:

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)

强制这个除法为浮点的最好/最优雅的方法是什么?

【问题讨论】:

    标签: go command-line-arguments floating-point-conversion


    【解决方案1】:

    no implicit type casts for variables in Go,所以一定要convert to float

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

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

    取决于你想要什么。另请查看float64——如果它漂浮你的船。

    【讨论】:

    • 您的第二个选项不会导致浮点除法:它只是将整数除法的结果转换为浮点数。
    • @JamesHenstridge:OP 读取“强制 此除法 为浮点”。对我来说,这可以读取任何一种方式,实际上将整数除法读取为浮点数。从示例代码中知道的是,除法的结果应该是浮动的,以便进入 printf - 因此两种方式都是可能的,因此我将两者都包括在内。
    • 转换其中一个(分子或分母)就足够了。
    【解决方案2】:

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

    一般来说,如果你有一些非浮点数类型(例如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。

    【讨论】:

      【解决方案3】:

      你应该将除法结果转换为浮点数

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 2018-01-23
        • 2020-05-19
        相关资源
        最近更新 更多