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


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


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.


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.


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

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

1
Die Frage scheint zu fordern doubleund nicht decimal.
Kyle Delaney
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.