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.
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:
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:
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.
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.
@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 );
Antworten:
Sie möchten die Zahlen umwandeln:
Hinweis: Wenn eines der Argumente in C # a ist
double
, wird einedouble
Division verwendet, die zu a führtdouble
. Folgendes würde also auch funktionieren:Weitere Informationen finden Sie unter:
Dot Net Perls
quelle
double num3 = (double)(num1/num2);
. Dies gibt Ihnen nur eine doppelte Darstellung des Ergebnisses der Ganzzahldivision!double
stattfloat
? Ich kann die Fragen sehen,double
aber ich bin trotzdem neugierig.double
und nichtfloat
. Wenn Sie eine Variable genau wie schreibenvar a = 1.0;
, ist diese 1.0 immer einedouble
. Ich denke, das ist der Hauptgrund.Ergänzung der Antwort von @ NoahD
Um eine höhere Genauigkeit zu erzielen, können Sie in Dezimalzahlen umwandeln:
Oder:
Double werden mit 64 Bit dargestellt, während Dezimal 128 verwendet
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 ,
floats
unddoubles
und diese , wo er sprichtdecimals
.quelle
double
hat eine Genauigkeit von 53 Bit und ist ein binäres Gleitkommaformat, währenddecimal
es ein ... Dezimalformat ist, natürlich mit einer Genauigkeit von 96 Bit . Istdouble
also auf ~ 15-17 Dezimalstellen und 28-29 Dezimalstellen genau (und nicht doppelt so genau wiedouble
). Noch wichtiger ist, verwendetdecimal
tatsächlich nur 102 der 128 Bitsdecimals
(96), sonderndoubles
hat 52 Bits Mantisse , nicht 53.Wirf die ganzen Zahlen auf Doppel.
quelle
Wandle einen von ihnen zuerst in ein Double um. Dieses Formular funktioniert in vielen Sprachen:
quelle
var result = 1.0 * a / b;
quelle
double
und nichtdecimal
.