2013-12-13 17 views
7

ich den folgenden Code-Schnipsel haben:Wie kann ich Division zwingen, Gleitpunkt in Go zu sein?

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) 
} 

Für -a 3 und -b 2-Befehlszeilenargumente, ist die Ausgabe: %!f(int=1)

Was die beste/elegante Art und Weise ist es, diese Teilung zu zwingen, Gleitpunkt sein?

Antwort

10

Es gibt no implicit type casts for variables in Go, so müssen Sie convert to float:

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

oder

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

Je nachdem, was Sie wollen. Überprüfen Sie auch float64 - wenn das schwimmt Ihr Boot.

+4

Ihre zweite Option führt zwar nicht zu einer Gleitkommadivision, sondern konvertiert nur das Ergebnis der Ganzzahldivision in Fließkommazahl. –

+0

@JamesHenstridge: Das OP las "force * this division * to floating point". Für mich könnte das so oder so gelesen werden und liest eigentlich Ganzzahl-Divison in Fließkomma. Alles, was aus dem Beispielcode bekannt war, war, dass das Ergebnis der Teilung schwebend sein sollte, um in printf zu gehen - somit waren beide Möglichkeiten möglich, also habe ich beide einbezogen. – bishop

+0

konvertieren eines von ihnen (entweder der Zähler oder der Nenner) ist ausreichend. – nishanths

-3

gut sollten Sie Ihr Divisionsergebnis als Schwimmer

3

Sie haben werfen die Typen zu konvertieren zuerst schwimmt.

Im Allgemeinen, wenn Sie einige Nicht-Schwimmer numerischen Typen (wie int s) a und b, um einen Schwimmer Division Sie float32(a)/ float32(b) benutzen Sie (oder float64 wie der Fall sein kann). Dies gilt auch für alle anderen numerischen Typen, wenn Sie Floats als Ganzzahlen oder Ganzzahlen behandeln möchten, da komplexe Zahlen die Operanden konvertieren. In diesem Fall, wenn a 3 ist und b 2 ist, wird float32(a)/float32(b) 1,5 sein.

Wenn Sie möchten, dass die Integer-Division durchgeführt wird, aber das Ergebnis ein Float ist, dann konvertieren Sie das Ergebnis wie in float32(a/b). In diesem Fall, wenn a 3 ist und b 2 ist, erhalten Sie float32(a/b) 1,0.