Saya mencoba melakukan divisi sederhana di Go.
fmt.Println(3/10)
Ini mencetak 0, bukan 0,3. Ini agak aneh. Bisakah seseorang berbagi apa alasan di balik ini? saya ingin melakukan operasi aritmatika yang berbeda di Go.
Terima kasih
Saya mencoba melakukan divisi sederhana di Go.
fmt.Println(3/10)
Ini mencetak 0, bukan 0,3. Ini agak aneh. Bisakah seseorang berbagi apa alasan di balik ini? saya ingin melakukan operasi aritmatika yang berbeda di Go.
Terima kasih
Jawaban:
Ekspresi tersebut 3 / 10
adalah ekspresi konstan tanpa tipe. Spesifikasi mengatakan ini tentang ekspresi konstan
jika operand operasi biner adalah jenis konstanta tak berjenis berbeda, operasi tersebut dan, untuk operasi non-boolean, hasilnya menggunakan jenis yang muncul nanti dalam daftar ini: integer, rune, floating-point, complex.
Karena 3
dan 10
merupakan konstanta bilangan bulat tanpa tipe, nilai ekspresi adalah bilangan bulat tanpa tipe ( 0
dalam kasus ini).
Salah satu operan harus berupa konstanta floating-point agar hasilnya menjadi konstanta floating-point. Ekspresi berikut mengevaluasi konstanta floating-point tanpa tipe 0.3
:
3.0 / 10.0
3.0 / 10
3 / 10.0
Ini juga memungkinkan untuk menggunakan konstanta yang diketik. Ekspresi berikut mengevaluasi float64
konstanta 0.3
:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
Mencetak salah satu ekspresi di atas akan dicetak 0.3
. Misalnya, fmt.Println(3.0 / 10)
cetakan 0.3
.
fmt.Println(float64(3) / float64(10))
memberi 0.3
.
Seperti yang disebutkan oleh @Cerise dan sesuai spesifikasi
Operator aritmatika berlaku untuk nilai numerik dan menghasilkan hasil dengan tipe yang sama seperti operan pertama.
Dalam hal ini, hanya operan pertama yang harus berupa floating point.
fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3