Rumah > pembangunan bahagian belakang > Golang > Bagaimana Saya Boleh Mengelak Ralat Ketepatan Semasa Menukar `float64` kepada `int` dalam Go?

Bagaimana Saya Boleh Mengelak Ralat Ketepatan Semasa Menukar `float64` kepada `int` dalam Go?

Barbara Streisand
Lepaskan: 2024-12-17 02:24:25
asal
362 orang telah melayarinya

How Can I Avoid Precision Errors When Converting `float64` to `int` in Go?

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)))    
}
Salin selepas log masuk

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:

  1. Bulatan untuk Paparan: Untuk mengelakkan output yang mengelirukan, bulatkan nombor titik terapung sebelum memaparkannya. Contohnya:

    fmt.Printf("%.2f\n", x) // Outputs: 0.55
    Salin selepas log masuk
  2. Gunakan Integer untuk Pengiraan: Jika ketepatan adalah penting, pertimbangkan untuk menggunakan integer untuk pengiraan. Sebagai contoh, kendalikan mata wang dalam sen berbanding dolar.

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!

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