2009-03-19 3 views
177

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

+9

Unter der Annahme, dies in einem Interview gefragt wurde - Integer-Division führt immer in integer. Sie müssen einen Typcast wie den unten gezeigten verwenden. – Sesh

+2

Verschiedene Arten von Divisionen: Ganzzahl, Fließkomma, Dezimal -diskussiert in [Warum Integer-Division in C# gibt eine Ganzzahl, aber nicht ein float?] (// stackoverflow.com/q/10851273) –

Antwort

313

Sie möchten die Zahlen werfen:

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

Hinweis: Wenn eines der Argumente in C# a double ist, eine double divide verwendet wird, die in einem double führt. So würde die folgenden arbeiten:

double num3 = (double)num1/num2; 

Weitere Informationen finden Sie unter:

Dot Net Perls

+2

Weiß nicht, ob das in C# gleich ist, aber C erfordert nur das erste zu werfen - es wird automatisch Doppel/Int ein Doppel. – paxdiablo

+3

@Pax, Wenn einer der Argumente in C oder C# ein Double ist, wird eine doppelte Division verwendet (was zu einem Double führt). – strager

+14

Achten Sie darauf, dies nicht zu tun: - 'double num3 = (double) (num1/num2);'. Dadurch erhalten Sie eine doppelte Darstellung des Ergebnisses der Ganzzahldivision! –

5

Konvertieren Sie eines von ihnen in ein Doppel zuerst. Dieses Formular funktioniert in vielen Sprachen:

real_result = (int_numerator + 0.0)/int_denominator 
+4

nicht der am besten lesbaren Code obwohl –

+0

Einfacher, einfach zu tun ... 'var result = 1.0 * a/b;' – Basic

+0

@ Basic gibt es 100 Möglichkeiten, es zu tun. Ich bevorzuge Zusatz, nur weil es schneller ist, obwohl Casting offensichtlich noch schneller ist. –

10

die Ganzzahlen auf doubles umwandeln.

+0

Um genau zu sein, können Sie eine Ganzzahl in ein Doppel wie folgt umwandeln: (double) myIntegerValue – Whiplash

16

Als Ergänzung zu den @ NoahD Antwort

Um eine größere Genauigkeit haben Sie dezimal werfen können:

(decimal)100/863 
//0.1158748551564310544611819235 

Oder:

Decimal.Divide(100, 863) 
//0.1158748551564310544611819235 

Doppel haben eine Genauigkeit von 64 Bit, während dezimal 128 hat

(double)100/863 
//0.11587485515643106 
0
var firstNumber=5000, 
secondeNumber=37; 

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

Console.WriteLine(decimalResult); 
+1

Die Frage scheint nach "double" und nicht nach "decimal" zu fragen. –