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

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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.