2013-09-30 13 views
24

http://golang.org/pkg/strconv/Go, Golang, Formatfloat: konvertieren Float-Zahl in String

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

Wie konvertiere ich eine Float-Zahl in String-Format? Dies ist Google Playground, aber nicht die erwartete Ausgabe. (2e + 07) Ich will bekommen "21.312.421,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 
} 

Bitte helfen Sie mir die Zeichenfolge erhalten aus Float-Zahl. Dank

Antwort

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)) 
} 

Wenn Sie nur so viele Ziffern Präzision wie möglich wollen, dann ist die besondere Präzision -1 verwendet die kleinste Anzahl von Stellen notwendig, so dass parseFloat f genau zurückkehren wird. ZB

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

Persönlich finde ich fmt einfacher zu bedienen. (Playground link)

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

Oder wenn Sie nur die Zeichenfolge zu konvertierende

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

+1 für 'strconv.FormatFloat' - ich war davon nicht bewusst, aber es könnte erwähnenswert sein, dass' FMT', während es netter zu verwenden ist, wird ein kleines bisschen langsamer als der direkte Funktionsaufruf sein, weil es viel Parsing nur tun muss, um herauszufinden, was Sie wollen, und rufen Sie dann 'strconv.FormatFloat' auf. –

+0

Danke aber, wenn ich nicht weiß, wie genau es sein soll. Was, wenn ich es nicht weiß, ist .000001 oder .001 –

+2

Ich aktualisierte die Antwort mit einem Abschnitt auf Präzision -1 im 'FloatFormat', was Sie wünschen. –