2015-01-10 34 views
4

我是新手編程,並試圖在Go中編寫一個簡單的平均程序。如何將Golang中的[] string轉換爲[] float64?

package main 

import (
    "fmt" 
    "os" 
) 

var numbers []float64 
var sum float64 = 0 

func main() { 

    if len(os.Args) > 1 { 

     numbers = os.Args[1:] 

    } 

    fmt.Println("Numbers are: ", numbers) 
    for _, value := range numbers { 
     sum += value 
    } 

} 

http://play.golang.org/p/TWNltPO71N

當我生成程序,我得到這個錯誤:

prog.go:15: cannot use os.Args[1:] (type []string) as type []float64 in assignment 
[process exited with non-zero status] 

那麼如何串片轉換爲浮點數一片?我可以將轉換函數映射到切片嗎?

回答

6

你需要轉換字符串使用strconv.ParseFloat功能float64:

package main 

import (
    "fmt" 
    "os" 
    "strconv" 
) 

var numbers []float64 
var sum float64 = 0 

func main() { 

    if len(os.Args) <= 1 { 
     return 
    } 

    for _, arg := range os.Args[1:] { 
     if n, err := strconv.ParseFloat(arg, 64); err == nil { 
      numbers = append(numbers, n) 
     } 
    } 

    fmt.Println("Numbers are: ", numbers) 
    for _, value := range numbers { 
     sum += value 
    } 

} 
+0

我不會在這裏使用'append()';數組的長度是已知的,我們可以分配它。 – fuz

+1

數組大小知道iff失敗float解析應該'中止'循環...我真的不喜歡你用你的編輯改變了我的代碼的含義:/ – tumdum

+0

如果你不喜歡,請撤銷我的編輯。沒關係。 – fuz

2

它不能進行轉換,因爲stringint不兼容。

代替具有numbers切片的,只是迭代os.Args[1:],使用ParseFloatstrconv包。

fmt.Print("Numbers are: ") 
for _, arg := range os.Args[1:] { 
    fmt.Print(arg, " ") 
    value, err := strconv.ParseFloat(arg, 64) 
    if err != nil { 
     panic(err) 
    } 
    sum += value 
} 
相關問題