2013-09-23 8 views
9

Utilizzo di Go Sto cercando di trovare il modo "migliore" per formattare un numero in virgola mobile in una stringa. Ho cercato esempi ma non riesco a trovare nulla che risponda in modo specifico alle domande che ho. Tutto quello che voglio fare è usare il metodo "migliore" per formattare un numero in virgola mobile in una stringa. Il numero di posizioni decimali può variare ma sarà noto (ad esempio 2 o 4 o zero). Un esempio di ciò che voglio ottenere è di seguito. In base all'esempio seguente dovrei usare fmt.Sprintf() o strconv.FormatFloat() o qualcos'altro? e, qual è il normale utilizzo di ciascuno e le differenze tra ciascuno?Come formattare i numeri in virgola mobile in una stringa utilizzando Go

inoltre non comprendo il significato di utilizzare 32 o 64 in seguito alla quale ha attualmente 32:

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

Esempio:

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

Dai un'occhiata a [Vai, Golang, formatFloat: converti numero float in stringa] (http://stackoverflow.com/a/19101700/562769). C'è una risposta migliore. –

risposta

13

Sia fmt.Sprintf e strconv.FormatFloat usa la stessa stringa routine di formattazione sotto le copertine, quindi dovrebbe dare gli stessi risultati.

Se la precisione con cui il numero deve essere formattato è variabile, probabilmente è più semplice da utilizzare FormatFloat, poiché evita la necessità di costruire una stringa di formato come con Sprintf. Se non cambia mai, puoi usare entrambi.

L'ultimo argomento su FormatFloat controlla come arrotondare i valori. Dalla documentazione:

arrotonda il risultato supponendo che l'originale è stato ottenuto da un valore a virgola mobile di bit Bitsize (32 per float32, 64 per float64)

Quindi, se sei lavorare con i valori float32 come nel codice di esempio, quindi passare 32 è corretto.

Problemi correlati