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.