为了账号安全,请及时绑定邮箱和手机立即绑定

如何将接口数组转换为浮点数

如何将接口数组转换为浮点数

Go
拉风的咖菲猫 2022-01-10 11:03:21
bound :=  []interface{}{1.00, 1.00, 1.00, 1.00}new_bound := bound.([]float32)log.Println(new_bound)如何将接口数组转换为浮点数组?无效类型断言:bound.([]float32) (左侧的非接口类型 []interface {})在实际项目中恐慌:接口转换:接口是 []interface {},而不是 []float32
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

在您的示例中,您有一个切片,其中包含的每个项目都是一个,interface{}而不是一个interface{}代表 a的单个项目[]float32,因此您不能像这样简单地转换整个集合。相反,您必须对其进行迭代并对集合中的每个项目进行类型断言。这是一个例子;https://play.golang.org/p/dD4161xgaV


bound :=  []interface{}{1.00, 1.00, 1.00, 1.00}

new_bound := []float64{}

for _, v := range bound {

     new_bound = append(new_bound, v.(float64))

}

需要注意的另一件事是,这些文字隐含了它们的类型,float64因此您在这里实际上需要它。


编辑:包括 OneOfOne 发布的这个更优化的解决方案;


func main() {

    bound := []interface{}{1.00, 1.10, 1.11, 1.111}

    new_bound := make([]float64, len(bound))

    for i := range bound {

        new_bound[i] = bound[i].(float64)

    }

    fmt.Println(new_bound)


}


查看完整回答
反对 回复 2022-01-10
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您将需要遍历切片并将每个项目附加到新切片。为了将它附加到您的 []float32,您需要键入 assert:


bound := []interface{}{1.00, 1.00, 1.00, 1.00}

new_bound := make([]float32, 0, len(bound))

for _, v := range bound {

    new_bound = append(new_bound, v.(float32))

}

GoPlay 在这里:https : //play.golang.org/p/S8-4KJkqPq


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信