Rumah > pembangunan bahagian belakang > Golang > Mengapakah `912 * 0.01` Berbeza daripada `float64(912) * 0.01` dalam Go?

Mengapakah `912 * 0.01` Berbeza daripada `float64(912) * 0.01` dalam Go?

Linda Hamilton
Lepaskan: 2024-12-16 19:00:15
asal
573 orang telah melayarinya

Why Does `912 * 0.01` Differ from `float64(912) * 0.01` in Go?

Perbezaan dalam Ketepatan Float64: Membongkar Nilai Yang Berbeza

Pertimbangkan contoh berikut dalam Go:

fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)
Salin selepas log masuk

Yang pertama kenyataan mencetak 9.12, manakala yang kedua menghasilkan 9.120000000000001. Perbezaan ketara dalam ketepatan ini boleh membingungkan.

Menurut Spesifikasi Bahasa Go, ungkapan malar dinilai dengan tepat. Dalam kes ini, 912 * 0.01 ialah ungkapan malar. Menilainya dengan tepat menghasilkan 9.12, yang kemudiannya ditugaskan kepada float64(912 * 0.01) dan dihantar ke fmt.Println().

Sebagai alternatif, float64(912) * 0.01 juga merupakan ungkapan malar. Walau bagaimanapun, operan kiri, pada asalnya integer, dilemparkan secara eksplisit ke float64 sebelum pendaraban. Ini bermakna 0.01 ditukar secara tersirat kepada float64 juga, menghasilkan pendaraban antara dua nilai float64.

Yang penting, 0.01 tidak boleh diwakili dengan tepat sebagai float64. Ia dibundarkan kepada nilai yang boleh diwakili terdekat, yang memperkenalkan sedikit ketidaktepatan. Hasilnya, float64(912) * 0.01 menilai kepada 9.120000000000001, yang kemudiannya dicetak.

Ringkasnya, perbezaan dalam output timbul daripada penilaian ungkapan malar: sama ada lakonan berlaku sebelum atau semasa penilaian, dan sama ada ketidaktepatan diperkenalkan disebabkan oleh pengehadan ketepatan float64.

Atas ialah kandungan terperinci Mengapakah `912 * 0.01` Berbeza daripada `float64(912) * 0.01` 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