Go'da bölme nasıl yapılır


89

Go'da basit bir bölme yapmaya çalışıyorum.

fmt.Println(3/10)

Bu, 0.3 yerine 0 yazdırır. Bu biraz tuhaf. Lütfen birisi bunun arkasındaki sebebi paylaşabilir mi? Go'da farklı aritmetik işlemler yapmak istiyorum.

Teşekkürler

Yanıtlar:


93

İfade 3 / 10, türlenmemiş sabit bir ifadedir. Spesifikasyon bunu sabit ifadeler hakkında söylüyor

bir ikili işlemin işlenenleri farklı türde türlenmemiş sabitler ise, işlem ve boole olmayan işlemler için sonuç, bu listede daha sonra görünen türü kullanır: tamsayı, rune, kayan nokta, karmaşık.

Çünkü 3ve 10Türlenmemiş tamsayı sabitlerdir ifade değeri (Türlenmemiş tamsayıdır 0bu durumda).

İşlenenlerden biri, sonucun kayan nokta sabiti olması için kayan nokta sabiti olmalıdır. Aşağıdaki ifadeler, türlenmemiş kayan nokta sabiti olarak değerlendirilir 0.3:

3.0 / 10.0
3.0 / 10
3 / 10.0

Ayrıca yazılan sabitleri kullanmak da mümkündür. Aşağıdaki ifadeler float64sabit olarak değerlendirilir 0.3:

float64(3) / float64(10)
float64(3) / 10
3 / float64(10)

Yukarıdaki ifadelerden herhangi birinin yazdırılması yazdırılacaktır 0.3. Örneğin fmt.Println(3.0 / 10)baskılar 0.3.


yüzde olduğunu varsayarak girdi alıyorum. Örneğin, kullanıcı 30 verirse, 30/100 * somen number yapmalıyım. Giriş her zaman bir tam sayı olacaktır. Bu senaryoda bölme nasıl yapılır?
Vrushank Doshi

Tam sayıları kayan noktalı sayılara dönüştürün .
Cerise Limón

fmt.Println (float64 (3/10)) denedim ama bana 0
Vrushank Doshi

8
@VrushankDoshi: fmt.Println(float64(3) / float64(10))verir 0.3.
peterSO

22

@Cerise tarafından belirtildiği gibi ve şartnameye göre

Aritmetik operatörler sayısal değerlere uygulanır ve ilk işlenenle aynı türde bir sonuç verir .

Bu durumda, sadece ilk işlenenin bir kayan nokta olması gerekir.

fmt.Println(3.0/10)
fmt.Println(float64(3)/10)
// 0.3 0.3

Misal


Evet! sadece ilk operand
SMMousavi

Her zaman değil "10" o zaman bu şu hatayı yükseltecek int olarak algılanan, durumunda başarılı: geçersiz işlem: (eşleşmeyen türleri float64 ve int)
Feras
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.