2013-09-30 15 views
24

http://golang.org/pkg/strconv/Go, Golang, formatFloat: konwersja liczby typu float do string

http://play.golang.org/p/4VNRgW8WoB

Jak przekonwertować liczbę zmiennoprzecinkową w formacie strun? To jest plac zabaw Google, ale nie ma oczekiwanego wyniku. (2e + 07) Chcę dostać „+21312421,213123”

package main 

import "fmt" 
import "strconv" 

func floattostr(input_num float64) string { 

     // to convert a float number to a string 
    return strconv.FormatFloat(input_num, 'g', 1, 64) 
} 

func main() { 
     fmt.Println(floattostr(21312421.213123)) 
     // what I expect is "21312421.213123" in string format 
} 

Proszę mi pomóc uzyskać ciąg z numerem pływaka. Dzięki

Odpowiedz

75

Try this

package main 

import "fmt" 
import "strconv" 

func FloatToString(input_num float64) string { 
    // to convert a float number to a string 
    return strconv.FormatFloat(input_num, 'f', 6, 64) 
} 

func main() { 
    fmt.Println(FloatToString(21312421.213123)) 
} 

Jeśli chcesz tylko tyle cyfr precyzji, jak to możliwe, a następnie specjalny precyzja -1 wykorzystuje najmniejszą liczbę cyfr koniecznych takie, że parseFloat powróci f dokładnie. Np.

strconv.FormatFloat(input_num, 'f', -1, 64) 

Osobiście uważam, że łatwiej jest używać fmt. (Playground link)

fmt.Printf("x = %.6f\n", 21312421.213123) 

Lub jeśli po prostu chcesz przekonwertować ciąg

fmt.Sprintf("%.6f", 21312421.213123) 
+0

+1 dla 'strconv.FormatFloat' - I nie był świadomy tego, ale być może warto zauważyć, że' fmt', chociaż jest ładniejszy w użyciu, będzie trochę wolniejszy niż bezpośrednie wywołanie funkcji, ponieważ musi wykonać wiele analiz, aby dowiedzieć się, co chcesz, i dopiero wtedy wywołać 'strconv.FormatFloat'. –

+0

Dzięki, ale co, jeśli nie wiem, jak precyzyjne powinno być. Co zrobić, jeśli nie wiem, że to .000001 lub .001 –

+2

Zaktualizowałem odpowiedź sekcją o precyzji -1 w 'FloatFormat', której właśnie chcesz. –