2015-01-10 4 views
4

Я новичок в программировании и пытаюсь написать простую среднюю программу в Go.Как преобразовать [] строку в [] float64 в Golang?

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

Вам нужно преобразовать строку в float64 с помощью функции strconv.ParseFloat:

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

Размер массива знает, если не удалось обработать float, должен «прервать» цикл ... Мне действительно не нравится, что вы изменили значение моего кода с помощью вашего редактирования:/ – tumdum

+0

Пожалуйста, отмените мое редактирование, если вам это не нравится. Все нормально. – fuz

2

Он не может преобразовать, потому что string и int не совместимы.

Вместо того, чтобы срез numbers, просто перебрать os.Args[1:], используя ParseFloat из strconv пакета.

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 
}