我只是试图使用类型开关来处理时间,float32s和float64s。对于time和float64s来说都可以正常工作,但是strconv.FormatFloat(val, 'f', -1, 32)不断告诉我我不能将type float32用作type float64。我不知道这是怎么发生的,所以我必须丢失一些东西或误解我应该如何为FormatFloat()调用float32s

func main() {
    fmt.Println(test(rand.Float32()))
    fmt.Println(test(rand.Float64()))
}

func test(val interface{}) string {
    switch val := val.(type) {
        case time.Time:
            return fmt.Sprintf("%s", val)
        case float64:
            return strconv.FormatFloat(val, 'f', -1, 64)
        case float32:
            return strconv.FormatFloat(val, 'f', -1, 32) //here's the error
        default:
            return "Type not supported!"
    }
}

错误:

最佳答案

FormatFloat的第一个参数必须是float64,并且您要传递float32。解决此问题的最简单方法是将32位浮点数简单地转换为64位浮点数。

case float32:
    return strconv.FormatFloat(float64(val), 'f', -1, 32)

http://play.golang.org/p/jBPaQ-jMBT

关于go - 在类型切换中使用strconv.FormatFloat()遇到问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24748452/

10-15 09:26