Das Konvertieren von Gleitkommazahlen (float64) in ganze Zahlen (int) in Go kann dazu führen unerwartete Ergebnisse aufgrund der Einschränkungen der Gleitkommadarstellung.
Dezimalzahlen wie 100,55 können nicht präzise mit einer endlichen Anzahl von Bits in binärer Form dargestellt werden, der internen Darstellung, die von Computern verwendet wird. Float64-Werte in Go entsprechen dem IEEE-754-Standard, der 53 Bit für den Bruchteil verwendet. Dies bedeutet, dass 100,55 der nächsten darstellbaren Binärzahl angenähert wird, was zu geringfügigen Abweichungen führt.
Betrachten Sie den folgenden Code:
package main import "fmt" func main() { x := 100.55 fmt.Println(x - float64(int(x))) }
Durch Ausführen dieses Codes wird gedruckt :
0.5499999999999972
anstelle des erwarteten 0,55.
String Formatters (fmt.Printf)
Eine Möglichkeit, mit dieser Diskrepanz umzugehen, besteht darin, die Gleitkommazahl vor dem Drucken auf die gewünschte Genauigkeit zu runden.
package main import "fmt" func main() { x := 100.55 fmt.Printf("%.2f\n", x) }
Dieser Code druckt:
0.55
Nicht-Gleitkomma-Darstellung
Ein anderer Ansatz besteht darin, die Verwendung von Gleitkommazahlen ganz zu vermeiden. Um beispielsweise Dollarbeträge darzustellen, könnten Sie Cent als ganze Zahlen verwenden und bei der Anzeige um 100 skalieren.
cents := 10055 fmt.Printf("%d.%d $\n", cents/100, cents%100)
Dieser Code gibt Folgendes aus:
100.55 $
Das obige ist der detaillierte Inhalt vonWarum führt die Konvertierung von float64 in int in Go zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!