我只是尝试使用类型开关来处理时间,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
答案 0 :(得分:7)
FormatFloat
的第一个参数需要是float64,并且您传递的是float32。解决这个问题的最简单方法是简单地将32位浮点数转换为64位浮点数。
case float32:
return strconv.FormatFloat(float64(val), 'f', -1, 32)