在类型switch中使用strconv.FormatFloat()时出现问题

时间:2014-07-15 01:06:37

标签: go

我只是尝试使用类型开关来处理时间,float32s和float64s。它适用于时间和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!"
    }
}

错误:

  

不能在strconv.FormatFloat的参数中使用val(类型为float32)作为类型float64

1 个答案:

答案 0 :(得分:7)

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

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

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