Wie kann ich zwei ganze Zahlen teilen, um ein Doppel zu erhalten?

282

Wie teile ich zwei ganze Zahlen, um ein Doppel zu erhalten?

Leora
quelle
10
Angenommen, dies wurde in einem Interview gefragt - die Ganzzahldivision führt immer zu einer Ganzzahl. Sie müssen einen Typ wie den unten gezeigten verwenden.
Sesh
2
Verschiedene Arten von Unterteilungen: Ganzzahl, Gleitkomma, Dezimalzahl - diskutiert in Warum gibt die Ganzzahldivision in c # eine Ganzzahl, aber kein
Michael Freidgeim

Antworten:

460

Sie möchten die Zahlen umwandeln:

double num3 = (double)num1/(double)num2;

Hinweis: Wenn eines der Argumente in C # a ist double, wird eine doubleDivision verwendet, die zu a führt double. Folgendes würde also auch funktionieren:

double num3 = (double)num1/num2;

Weitere Informationen finden Sie unter:

Dot Net Perls

NoahD
quelle
3
Ich weiß nicht, ob dies in C # dasselbe ist, aber C erfordert nur, dass Sie das erste wirken - es macht automatisch double / int zu einem double.
Paxdiablo
4
@Pax, Wenn eines der Argumente in C oder C # ein Double ist, wird eine doppelte Division verwendet (was zu einem Double führt).
Strager
32
Achten Sie darauf, dies nicht zu tun : double num3 = (double)(num1/num2);. Dies gibt Ihnen nur eine doppelte Darstellung des Ergebnisses der Ganzzahldivision!
Der einsame
Angenommen , Sie die zusätzliche Präzision nicht benötigen, gibt es einen Grund zu cast doublestatt float? Ich kann die Fragen sehen, doubleaber ich bin trotzdem neugierig.
Kyle Delaney
@KyleDelaney Nur weil in C # wir normalerweise verwenden doubleund nicht float. Wenn Sie eine Variable genau wie schreiben var a = 1.0;, ist diese 1.0 immer eine double. Ich denke, das ist der Hauptgrund.
this.myself
31

Ergänzung der Antwort von @ NoahD

Um eine höhere Genauigkeit zu erzielen, können Sie in Dezimalzahlen umwandeln:

(decimal)100/863
//0.1158748551564310544611819235

Oder:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Double werden mit 64 Bit dargestellt, während Dezimal 128 verwendet

(double)100/863
//0.11587485515643106

Ausführliche Erklärung von "Präzision"

Für weitere Details über die Gleitkommadarstellung in Binär- und seine Präzision einen Blick auf nehmen diesen Artikel von Jon Skeet , wo er darüber spricht , floatsund doublesund diese , wo er spricht decimals.

Fabriciorissetto
quelle
2
Falsch! doublehat eine Genauigkeit von 53 Bit und ist ein binäres Gleitkommaformat, während decimales ein ... Dezimalformat ist, natürlich mit einer Genauigkeit von 96 Bit . Ist doublealso auf ~ 15-17 Dezimalstellen und 28-29 Dezimalstellen genau (und nicht doppelt so genau wie double). Noch wichtiger ist, verwendet decimaltatsächlich nur 102 der 128 Bits
phuclv
Danke @phuclv, das wurde behoben. Ich meinte "Platzzuweisung". Sie hatten Recht über die Präzision decimals(96), sondern doubleshat 52 Bits Mantisse , nicht 53.
fabriciorissetto
1
Ja, die Mantisse hat 52 Bits, aber es gibt immer noch ein verstecktes Bit, was zu einem 53-Bit-Signifikanten führt. Sind es 52 oder 53 Bit Gleitkommapräzision?
Phuclv
Decimal.Divide war großartig! Thx
Ricardo G Saraiva
10

Wirf die ganzen Zahlen auf Doppel.

Stephen Wrighton
quelle
Um genau zu sein, können Sie eine Ganzzahl wie folgt in ein Double umwandeln: (double) myIntegerValue
Whiplash
5

Wandle einen von ihnen zuerst in ein Double um. Dieses Formular funktioniert in vielen Sprachen:

 real_result = (int_numerator + 0.0) / int_denominator
Mark Ransom
quelle
1
Einfacher zu tun ...var result = 1.0 * a / b;
Basic
@Basic gibt es 100 Möglichkeiten, es zu tun. Ich bevorzuge das Hinzufügen, nur weil es schneller ist, obwohl das Casting offensichtlich noch schneller ist.
Mark Ransom
1
var firstNumber=5000,
secondeNumber=37;

var decimalResult = decimal.Divide(firstNumber,secondeNumber);

Console.WriteLine(decimalResult );
Rejwanul Reja
quelle
1
Die Frage scheint zu fordern doubleund nicht decimal.
Kyle Delaney