Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mengelak Ralat Titik Terapung Semasa Menukar `float64` kepada `int` dalam Go?

Bagaimanakah Saya Boleh Mengelak Ralat Titik Terapung Semasa Menukar `float64` kepada `int` dalam Go?

Susan Sarandon
Lepaskan: 2024-12-27 20:54:11
asal
393 orang telah melayarinya

How Can I Avoid Floating-Point Errors When Converting `float64` to `int` in Go?

Mengelakkan Ralat Titik Terapung dalam Go dengan Penukaran float64 kepada int

Apabila menukar nombor titik terapung (float64) kepada integer (int) dalam Pergi, pembangun mungkin menghadapi isu ketepatan yang membawa kepada hasil yang tidak dijangka. Artikel ini meneroka batasan perwakilan float64 IEEE-754 dan menyediakan panduan untuk mengurangkan ralat ini.

Memahami Isu Penukaran

Nombor titik terapung disimpan menggunakan IEEE -754 standard, yang mewakili nombor sebagai perwakilan binari terhingga dengan bit terhad tersedia untuk digit. Oleh itu, bukan semua nombor perpuluhan boleh diwakili dengan tepat dalam format binari ini.

Akibatnya, apabila menukar nilai float64 kepada int, perwakilan binari yang digunakan untuk float64 mungkin tidak sejajar dengan perwakilan binari int yang sepadan. Percanggahan ini membawa kepada ralat pembundaran, seperti yang dilihat dalam kod contoh di bawah:

x := 100.55
fmt.Println(x - float64(int(x))) // Output: 0.5499999999999972
Salin selepas log masuk

Mengatasi Ralat

Menguruskan ralat titik terapung memerlukan pemahaman yang berikut:

  • Perwakilan IEEE-754: Fahami had perwakilan binari untuk nilai float64.
  • Pembulatan: Kenali bahawa penukaran daripada float64 kepada int melibatkan pembundaran kepada integer terdekat.
  • Ketepatan: Terima bahawa nombor titik terapung mungkin tidak selalu boleh diwakili dengan tepat dalam binari format.

Untuk mengelakkan ralat sedemikian, pertimbangkan strategi berikut:

  • Gunakan Jenis Integer: Jika ketepatan adalah penting, simpan jumlah wang atau yang serupa nilai sebagai integer dan bukannya float64s.
  • Pusingan Nombor: Gunakan fungsi fmt.Printf() untuk membundarkan nilai float64 kepada bilangan tempat perpuluhan tertentu sebelum mencetaknya.
  • Ambil Penghampiran: Fahami bahawa nilai float64 ialah perwakilan anggaran dan elakkan membandingkannya dengan tepat kesaksamaan.

Kesimpulan

Menukar float64 kepada int dalam Go melibatkan pemahaman perwakilan IEEE-754 dan menerima had sedia ada sistem nombor binari. Dengan menggunakan strategi yang dibincangkan di atas, pembangun boleh mengelakkan ralat ketepatan dan memastikan pengiraan berangka yang tepat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelak Ralat Titik Terapung Semasa Menukar `float64` kepada `int` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan