Bagaimana cara mengubah float64 menjadi int di Go? Saya tahu strconv
paket tersebut dapat digunakan untuk mengonversi apa pun ke atau dari string, tetapi tidak di antara tipe data di mana satu bukan string. Saya tahu saya dapat menggunakan fmt.Sprintf
untuk mengonversi apa pun menjadi string, dan kemudian strconv
ke tipe data yang saya butuhkan, tetapi konversi tambahan ini tampaknya agak kikuk - adakah cara yang lebih baik untuk melakukan ini?
124
int(Round(f))
untuk mengatur float64 ke int. Lihat stackoverflow.com/a/62753031/12817546 .float64(i)
untuk menyetel int ke float64. Lihat stackoverflow.com/a/62737936/12817546 .Jawaban:
sumber
Cukup mentransmisikan ke int memotong float, yang jika sistem Anda secara internal merepresentasikan 2.0 sebagai 1.9999999999, Anda tidak akan mendapatkan apa yang Anda harapkan. Berbagai konversi printf menangani ini dan membulatkan angka dengan benar saat mengonversi. Jadi, untuk mendapatkan nilai yang lebih akurat, konversi menjadi lebih rumit dari yang Anda perkirakan sebelumnya:
Kode di Go Playground
sumber
Jika hanya dari float64 ke int, ini seharusnya berfungsi
Keluaran:
Berikut kode di taman bermain - https://play.golang.org/p/HmFfM6Grqh
sumber
Anda dapat menggunakan
int()
fungsi untuk mengubahfloat64
tipe data menjadi fileint
. Demikian pula yang bisa Anda gunakanfloat64()
Contoh:
sumber
Pembulatan yang benar mungkin diinginkan.
Oleh karena itu, math.Round () adalah teman cepat (!) Anda. Pendekatan dengan fmt.Sprintf dan strconv.Atois () adalah 2 kali lipat lebih lambat menurut pengujian saya dengan matriks nilai float64 yang dimaksudkan untuk menjadi nilai int yang dibulatkan dengan benar.
math.Round () mengembalikan nilai float64 tetapi dengan int () diterapkan setelahnya, sejauh ini saya tidak dapat menemukan ketidakcocokan.
sumber