Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menukar float64 dengan tepat kepada uint64 dalam Go?
Cara Menukar Nombor Float64 kepada UInt64 Dengan Betul
Pertimbangkan kod Go berikut:
package main func main() { var n float64 = 6161047830682206209 println(uint64(n)) }
Yang dijangkakan output adalah untuk menukar nombor float64 kepada uint64, mengekalkan nilai. Walau bagaimanapun, output sebenar ialah 6161047830682206208, menunjukkan bahawa bahagian pecahan dibuang.
Memahami Isu
Percanggahan timbul disebabkan oleh had titik-apungan diwakili menggunakan piawaian IEEE 754. Dalam IEEE 754, 53 bit diperuntukkan untuk menyimpan digit dalam nombor titik terapung 64-bit (float64 dalam Go). Untuk pemalar yang diberikan, bilangan digit yang boleh diwakili adalah kurang daripada bilangan digit dalam pemalar itu sendiri.
Oleh itu, pemalar tidak boleh disimpan dengan tepat dalam pembolehubah float64, dan beberapa digit dibundarkan dan hilang. Ini boleh disahkan dengan mencetak nombor n float64 asal:
fmt.Printf("%f\n", n) fmt.Printf("%d\n", uint64(n))
Penukaran Betul
Untuk menukar nombor float64 kepada uint64 dengan betul, adalah disyorkan untuk menggunakan fungsi Trunc, yang memotong bahagian pecahan nombor float64 dan mengembalikan integer bahagian:
package main import "math" func main() { var n float64 = 6161047830682206209 println(uint64(math.Trunc(n))) }
Pendekatan ini memastikan nilai integer ditukar tanpa kehilangan ketepatan.
Atas ialah kandungan terperinci Bagaimana untuk Menukar float64 dengan tepat kepada uint64 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!