Heim > Backend-Entwicklung > Golang > Wie kann ich float64 in Go sicher in uint64 konvertieren?

Wie kann ich float64 in Go sicher in uint64 konvertieren?

Mary-Kate Olsen
Freigeben: 2024-12-15 02:44:10
Original
205 Leute haben es durchsucht

How to Safely Convert float64 to uint64 in Go?

Korrekte Konvertierung von float64 in uint64

Beim Versuch, eine float64-Zahl in eine uint64-Zahl in Go umzuwandeln, können Präzisionsprobleme auftreten. Dies führt oft zu unerwartetem Verhalten, da die Bruchkomponente von float64 während der Konvertierung verworfen wird.

Zur Veranschaulichung des Problems:

package main

import "fmt"

func main() {
    var n float64 = 6161047830682206209
    fmt.Println(uint64(n))
}
Nach dem Login kopieren

Dieser Code gibt den folgenden falschen Wert aus:

6161047830682206208
Nach dem Login kopieren

Das Problem

Die Wurzel des Problems liegt in den Unterschieden zwischen den Wie-Konstanten und Gleitkommazahlen werden in Go dargestellt. Konstanten werden mit beliebiger Genauigkeit dargestellt, während Gleitkommazahlen dem IEEE 754-Standard folgen. Das bedeutet, dass Konstanten zwar Werte ohne Präzisionsverlust darstellen können, Gleitkommazahlen jedoch nur über eine begrenzte Anzahl von Bits (53 für float64) zum Speichern von Ziffern verfügen.

Die Lösung

Um ein float64 korrekt in ein uint64 umzuwandeln, müssen Sie sicherstellen, dass die float64-Zahl innerhalb der verfügbaren 52 Bits präzise dargestellt werden kann. Andernfalls geht die Präzision verloren. Sie können dies tun, indem Sie überprüfen, ob der float64-Wert innerhalb des darstellbaren Bereichs von uint64 liegt.

Unten finden Sie ein Beispiel für eine Funktion, die die Darstellbarkeit vor der Umwandlung überprüft:

func Float64ToUint64(n float64) (uint64, error) {
    if (n < 0) || (n > math.MaxUint64) {
        return 0, errors.New("value out of range")
    }
    return uint64(n), nil
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich float64 in Go sicher in uint64 konvertieren?. 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