Mengelakkan Ralat Ketepatan dalam Penukaran Float-to-Int dalam Go
Apabila menukar nilai float64 kepada int dalam Go, pengaturcara sering menghadapi ralat ketepatan . Ralat ini timbul disebabkan oleh had sedia ada perwakilan nombor perduaan pada komputer.
Memahami Perwakilan Binari
Float64 mewakili nombor menggunakan standard IEEE-754, memperuntukkan 53 bit untuk digit dan 11 bit untuk eksponen. Walau bagaimanapun, nombor tertentu, seperti 100.55, tidak boleh diwakili dengan tepat dalam struktur binari terhingga ini.
Kod:
Kod berikut menunjukkan isu:
package main import "fmt" func main() { x := 100.55 fmt.Println(x - float64(int(x))) }
Kod ini mengeluarkan 0.5499999999999972 dan bukannya yang dijangkakan 0.55. Sebabnya ialah perwakilan binari tidak boleh menyimpan 100.55 dengan tepat, dan nombor yang terhasil disimpan dalam x berbeza sedikit.
Penyelesaian:
Bulatan untuk Paparan: Untuk mengelakkan output yang mengelirukan, bulatkan nombor titik terapung sebelum memaparkannya. Contohnya:
fmt.Printf("%.2f\n", x) // Outputs: 0.55
Kesimpulan:
Memahami batasan perwakilan binari dan menggunakan pengiraan pembundaran atau berasaskan integer boleh mengurangkan ralat ketepatan semasa menukar float64 kepada int dalam Go.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Mengelak Ralat Ketepatan Semasa Menukar `float64` kepada `int` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!