2013-12-13 57 views
7

Aşağıdaki kod parçacığını sahip I: -a 3 ve -b 2 komut satırı argümanları içinGitmeyi, kayan nokta olarak gitmeye nasıl zorlayabilirim?

package main 

import("fmt";"flag") 

func main() { 
    var a = flag.Int("a",0,"divident") 
    var b = flag.Int("b",1,"divisor") 
    flag.Parse() 

    fmt.Printf("%f",*a/*b) 
} 

, çıkışı: Bu bölünme zorlamak için en iyi/en zarif yolu nedir %!f(int=1)

kayan nokta mı?

cevap

10

no implicit type casts for variables in Go vardır, bu yüzden convert to float gerekir:

fmt.Printf("%f", float32(a)/float32(b)) 

veya ne istediğinizi bağlı olarak

fmt.Printf("%f", float32(a/b)) 

. float64 numaralı telefonu da kontrol edin - eğer , teknenizi yüzer.

+4

İkinci seçeneğiniz kayan nokta bölmesiyle sonuçlanmayacaktır: yalnızca tamsayı bölümünün sonucunu kayan noktaya dönüştürür. –

+0

@JamesHenstridge: OP, "bu bölmeyi * kayan nokta olacak şekilde" okudu. Bana göre, bu her iki şekilde de okuyabilir ve aslında tamsayı bölüşümünü kayan noktaya okur. Örnek koddan bilinen her şey, bölünmenin sonucunun, yazdırmaya gitmek için yüzer olması gerektiğiydi - böylece her iki yol da mümkün oldu, böylece ikisini de dahil ettim. – bishop

+0

bunlardan birini (pay veya payda) dönüştürmek yeterlidir. – nishanths

-3

de sen şamandıra

Önce yüzer etmek türlerini dönüştürmek zorunda
3

olarak bölünmesi sonucu kullanması gereklidir. Genel olarak

, size (duruma veya float64) float32(a)/ float32(b) kullanımı bir flot bölünme elde etmek için, bazı olmayan yüzer sayısal tipleri (örneğin int olarak ler) a ve b, varsa. Karmaşık sayılar işlenenleri dönüştürdüğünden, yüzdelerini tamsayılar veya tamsayılar olarak işlemek istiyorsanız bu, diğer sayısal türler için de geçerlidir. Bu durumda, a 3 ve b 2 ise, float32(a)/float32(b) 1,5 olacaktır.

Tam sayı bölmesinin yapılmasını istiyorsanız, ancak sonuç yüzer durumda değilse, sonucu float32(a/b) olarak gizleyin. Bu durumda, a 3 ve b 2 ise, float32(a/b) size 1.0 alacaktır.