Penukaran Float64 kepada Uint64: Memastikan Ketepatan
Nombor titik terapung, diwakili oleh float64 dalam Go, simpan nilai dengan ketepatan berubah. Apabila menukar float64 kepada jenis integer seperti uint64, adalah penting untuk memahami potensi kehilangan ketepatan.
Piawaian IEEE 754 mentakrifkan ketepatan float64 sebagai 53 bit, yang mengehadkan bilangan digit yang boleh diwakili dengan tepat. Pemalar, bagaimanapun, boleh diwakili dengan ketepatan sewenang-wenangnya.
Pertimbangkan contoh berikut:
package main import "fmt" func main() { var n float64 = 6161047830682206209 fmt.Printf("%f\n", n) fmt.Printf("%d\n", uint64(n)) }
Outputnya ialah:
6161047830682206208.000000 6161047830682206208
Seperti yang kita lihat, nombor yang disimpan dalam n tidak betul-betul sama dengan pemalar 6161047830682206209, kerana terhad ketepatan apungan64. Apabila menukar nilai ini kepada uint64, bahagian pecahan dibuang, mengakibatkan kehilangan ketepatan.
Untuk memastikan ketepatan dalam penukaran, kami boleh menggunakan kaedah yang lebih selamat:
func main() { const n = 6161047830682206209 var u uint64 = uint64(n) fmt.Printf("%f\n", float64(u)) fmt.Printf("%d\n", u) }
Dalam contoh ini, kami secara langsung memberikan pemalar kepada pembolehubah uint64, memastikan bahawa nilai yang tepat dikekalkan. Penukaran seterusnya kepada float64 adalah tepat dan akan menghasilkan nilai asal.
Memahami had ketepatan titik terapung adalah penting apabila menukar antara jenis data yang berbeza. Dengan mempertimbangkan dengan teliti keperluan ketepatan, kami boleh memastikan bahawa proses penukaran tidak memperkenalkan sebarang kehilangan data yang tidak diingini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar float64 kepada uint64 dengan Selamat dalam Go and Preserve Precision?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!