Come posso dividere due numeri interi per ottenere un doppio?


282

Come divido due numeri interi per ottenere un doppio?


10
Supponendo che ciò sia stato chiesto in un'intervista - la divisione intera risulta sempre in numero intero. Devi usare un cast di tipo come quelli mostrati di seguito.
Sesh,

2
Diversi tipi di divisioni: intero, virgola mobile, decimale discusso in Perché la divisione di numeri interi in c # restituisce un numero intero ma non un float?
Michael Freidgeim,

Risposte:


460

Vuoi lanciare i numeri:

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

Nota: se uno qualsiasi degli argomenti in C # è a double, doubleviene utilizzata una divisione che risulta in a double. Quindi, funzionerebbe anche il seguente:

double num3 = (double)num1/num2;

Per ulteriori informazioni, vedere:

Dot Net Perls


3
Non so se questo è lo stesso in C #, ma C richiede solo di lanciare il primo: renderà automaticamente double / int un doppio.
paxdiablo,

4
@Pax, se uno qualsiasi degli argomenti in C o C # è un doppio, viene utilizzato un doppio divario (risultante in un doppio).
Strager

32
Fare attenzione a non farlo: - double num3 = (double)(num1/num2);. Questo ti darà solo una doppia rappresentazione del risultato della divisione intera!
The Lonely Coder,

Supponendo che non sia necessaria la precisione aggiuntiva, c'è un motivo per lanciare doubleinvece di float? Riesco a vedere la domanda, doublema sono curioso comunque.
Kyle Delaney,

@KyleDelaney Solo perché in C # normalmente usiamo doublee non float. Quando scrivi una variabile come var a = 1.0;questa, questa 1.0 è sempre una double. Immagino che questo sia il motivo principale.
questo

31

Completando la risposta di @ NoahD

Per avere una maggiore precisione puoi eseguire il cast in decimale:

(decimal)100/863
//0.1158748551564310544611819235

O:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

I doppi sono rappresentati allocando 64 bit mentre i decimali ne usano 128

(double)100/863
//0.11587485515643106

Spiegazione approfondita della "precisione"

Per maggiori dettagli sulla rappresentazione in virgola mobile in formato binario e la sua precisione dare un'occhiata a questo articolo da Jon Skeet dove si parla di floatse doublese questo in cui parla decimals.


2
Sbagliato! doubleha una precisione di 53 bit, ed è un formato binario a virgola mobile, mentre decimalè ... decimale, ovviamente, con 96 bit di precisione . Quindi doubleè preciso a ~ 15-17 cifre decimali e cifre decimali 28-29 (e non il doppio della precisione di double). Ancora più importante in decimalrealtà usa solo 102 dei 128 bit
phuclv

Grazie @phuclv, risolto ciò. Intendevo "allocazione dello spazio". Avevi ragione sulla precisione di decimals(96), ma doublesha 52 bit di mantissa , non 53.
fabriciorissetto,

1
sì, la mantissa ha 52 bit, ma c'è ancora un bit nascosto, con conseguente significato di 53 bit. 52 o 53 bit di precisione in virgola mobile?
phuclv,

Decimal.Divide è stato fantastico! Grazie
Ricardo G Saraiva,

10

cast degli interi in doppio.


Per essere precisi, puoi lanciare un numero intero in un doppio in questo modo: (double) myIntegerValue
Whiplash

5

Converti prima uno di loro in doppio. Questo modulo funziona in molte lingue:

 real_result = (int_numerator + 0.0) / int_denominator

1
Più facile da fare ...var result = 1.0 * a / b;
Basic

@Basic ci sono 100 modi per farlo. Preferisco l'aggiunta solo perché è più veloce, anche se il casting è ovviamente ancora più veloce.
Mark Ransom,

1
var firstNumber=5000,
secondeNumber=37;

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

Console.WriteLine(decimalResult );

1
La domanda sembra chiedere doublee non decimal.
Kyle Delaney,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.