Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menukar float64 kepada uint64 dengan Selamat dalam Go and Preserve Precision?

Bagaimanakah Saya Boleh Menukar float64 kepada uint64 dengan Selamat dalam Go and Preserve Precision?

Linda Hamilton
Linda Hamiltonasal
2024-12-17 13:54:10566semak imbas

How Can I Safely Convert float64 to uint64 in Go and Preserve Precision?

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!

Kenyataan:
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