Wie konvertiert man ein float64 in ein int in Go? Ich weiß, dass das strconv
Paket verwendet werden kann, um etwas in oder von einer Zeichenfolge zu konvertieren, aber nicht zwischen Datentypen, bei denen es sich nicht um eine Zeichenfolge handelt. Ich weiß, dass ich damit fmt.Sprintf
alles in eine Zeichenfolge konvertieren kann und dann strconv
in den Datentyp, den ich benötige, aber diese zusätzliche Konvertierung scheint etwas umständlich zu sein - gibt es einen besseren Weg, dies zu tun?
124
int(Round(f))
um einen float64 auf einen int zu setzen. Siehe stackoverflow.com/a/62753031/12817546 .float64(i)
um ein int auf ein float64 zu setzen. Siehe stackoverflow.com/a/62737936/12817546 .Antworten:
quelle
Durch einfaches Casting in ein Int wird der Float abgeschnitten. Wenn Ihr System intern 2.0 als 1.9999999999 darstellt, erhalten Sie nicht das, was Sie erwarten. Die verschiedenen printf-Konvertierungen kümmern sich darum und runden die Zahl beim Konvertieren richtig ab. Um einen genaueren Wert zu erhalten, ist die Konvertierung noch komplizierter als zunächst angenommen:
Code on Go Spielplatz
quelle
Wenn es einfach von float64 bis int ist, sollte dies funktionieren
Ausgänge:
Hier ist der Code auf dem Spielplatz - https://play.golang.org/p/HmFfM6Grqh
quelle
Sie können mit
int()
Funktion konvertierenfloat64
Typ Daten einint
. Ebenso können Sie verwendenfloat64()
Beispiel:
quelle
Eine korrekte Rundung ist wahrscheinlich erwünscht.
Deshalb ist math.Round () dein schneller (!) Freund. Ansätze mit fmt.Sprintf und strconv.Atois () waren nach meinen Tests mit einer Matrix von float64-Werten, die korrekt gerundete int-Werte werden sollten, 2 Größenordnungen langsamer.
math.Round () gibt zwar einen float64-Wert zurück, aber mit int (), das danach angewendet wird, konnte ich bisher keine Fehlanpassungen finden.
quelle