2013-09-23 17 views
9

Używanie Go Próbuję znaleźć "najlepszy" sposób na sformatowanie liczby zmiennoprzecinkowej w ciągu znaków. Szukałem przykładów, ale nie mogę znaleźć niczego, co by odpowiadało konkretnie na pytania, które mam. Wszystko, co chcę zrobić, to użyć metody "najlepszej" do sformatowania liczby zmiennoprzecinkowej w łańcuchu. Liczba miejsc dziesiętnych może być różna, ale będzie znana (np. 2 lub 4 lub zero). Oto przykład tego, co chcę osiągnąć. Na podstawie poniższego przykładu należy użyć fmt.Sprintf() lub strconv.FormatFloat() lub coś jeszcze? i jakie jest normalne użycie każdego z nich i różnice między nimi?Jak sformatować liczby zmiennoprzecinkowe na ciąg za pomocą Go

Ja też nie zrozumieć znaczenie przy użyciu 32 lub 64 w następujących składników, które obecnie posiada 32:

strconv.FormatFloat(float64(fResult), 'f', 2, 32) 

Przykład:

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 

    var (
     fAmt1 float32 = 999.99 
     fAmt2 float32 = 222.22 
    ) 

    var fResult float32 = float32(int32(fAmt1*100) +int32(fAmt2*100))/100 

    var sResult1 string = fmt.Sprintf("%.2f", fResult) 

    println("Sprintf value = " + sResult1) 

    var sResult2 string = strconv.FormatFloat(float64(fResult), 'f', 2, 32) 

    println("FormatFloat value = " + sResult2) 

} 
+0

Zobacz [Go, Golang, formatFloat: skonwertuj liczbę zmiennoprzecinkową na ciąg] (http://stackoverflow.com/a/19101700/562769). Jest lepsza odpowiedź. –

Odpowiedz

13

Zarówno fmt.Sprintf i strconv.FormatFloat używać ten sam ciąg formatowanie pod okładkami, więc powinno dać takie same wyniki.

Jeśli dokładność, do której liczba powinna być sformatowana, jest zmienna, to prawdopodobnie łatwiej jest użyć FormatFloat, ponieważ pozwala to uniknąć konieczności konstruowania ciągu formatów, tak jak w przypadku Sprintf. Jeśli nigdy się nie zmieni, możesz użyć jednego z nich.

Ostatni argument do FormatFloat określa sposób zaokrąglania wartości. Z dokumentacji:

To zaokrągla wynik zakładając, że oryginał został uzyskany od wartości zmiennoprzecinkowych bitów bitSize (32 dla float32, 64 dla float64)

Więc jeśli jesteś pracując z wartościami float32 jak w kodzie przykładowym, a następnie przekazując 32 jest poprawna.

Powiązane problemy