Cara melakukan pembagian di Go

89

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

Vrushank Doshi
sumber

Jawaban:

93

Ekspresi tersebut 3 / 10adalah 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 3dan 10merupakan konstanta bilangan bulat tanpa tipe, nilai ekspresi adalah bilangan bulat tanpa tipe ( 0dalam 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 float64konstanta 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.

Cerise Limón
sumber
saya mengambil masukan dengan asumsi itu adalah persentase. Misalnya, Jika pengguna memberikan 30, saya harus melakukan nomor 30/100 *. Masukan akan selalu berupa bilangan bulat. Bagaimana melakukan pembagian dalam skenario ini?
Vrushank Doshi
Ubah bilangan bulat menjadi bilangan floating point.
Cerise Limón
saya mencoba fmt.Println (float64 (3/10)) tetapi memberi saya 0
Vrushank Doshi
8
@VrushankDoshi: fmt.Println(float64(3) / float64(10))memberi 0.3.
peterSO
22

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

Contoh

robstarbuck
sumber
Iya! hanya operan pertama
SMMousavi
Tidak selalu berhasil, jika "10" terdeteksi sebagai int maka ini akan memunculkan kesalahan berikut: operasi tidak valid: (jenis float64 dan int tidak cocok)
Feras