Heim > Backend-Entwicklung > Golang > Warum führt die Konvertierung von float64 in int in Go zu unerwarteten Ergebnissen?

Warum führt die Konvertierung von float64 in int in Go zu unerwarteten Ergebnissen?

Patricia Arquette
Freigeben: 2024-12-14 22:11:12
Original
748 Leute haben es durchsucht

Why Does Converting float64 to int in Go Produce Unexpected Results?

Fehler beim Konvertieren von float64 in int in Go

Einführung

Das Konvertieren von Gleitkommazahlen (float64) in ganze Zahlen (int) in Go kann dazu führen unerwartete Ergebnisse aufgrund der Einschränkungen der Gleitkommadarstellung.

Verstehen der Problem

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.

Beispiel

Betrachten Sie den folgenden Code:

package main

import "fmt"

func main() {
    x := 100.55
    fmt.Println(x - float64(int(x)))
}
Nach dem Login kopieren

Durch Ausführen dieses Codes wird gedruckt :

0.5499999999999972
Nach dem Login kopieren

anstelle des erwarteten 0,55.

Lösung

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)
}
Nach dem Login kopieren

Dieser Code druckt:

0.55
Nach dem Login kopieren

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)
Nach dem Login kopieren

Dieser Code gibt Folgendes aus:

100.55 $
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage