Como posso dividir dois números inteiros para obter um dobro?

282

Como divido dois números inteiros para obter um dobro?

leora
fonte
10
Supondo que isso foi perguntado em uma entrevista - a divisão inteira sempre resulta em inteiro. Você deve usar um tipo de conversão como os mostrados abaixo.
Sesh
2
Diferentes tipos de divisões: Inteiro, Ponto flutuante, Decimal - discutido em Por que a divisão inteira em c # retorna um número inteiro, mas não um número flutuante?
Michael Freidgeim 27/03

Respostas:

460

Você deseja converter os números:

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

Nota: Se qualquer um dos argumentos em C # for a double, doubleserá usada uma divisão que resultará em a double. Portanto, o seguinte também funcionaria:

double num3 = (double)num1/num2;

Para mais informações, veja:

Dot Net Perls

NoahD
fonte
3
Não sei se isso é o mesmo em C #, mas o C exige apenas que você lance o primeiro - ele automaticamente tornará double / int um duplo.
21420
4
@Pax, se qualquer um dos argumentos em C ou C # for duplo, uma dupla divisão será usada (resultando em um duplo).
Strager 19/03/09
32
Cuidado para não fazer isso: - double num3 = (double)(num1/num2);. Isso fornecerá uma representação dupla do resultado da divisão inteira!
The Lonely Coder
Supondo que você não precise de precisão extra, existe um motivo para transmitir em doublevez de float? Eu posso ver a pergunta, doublemas estou curiosa de qualquer maneira.
Kyle Delaney
@KyleDelaney Apenas porque em C # normalmente usamos doublee não float. Quando você escreve uma variável como var a = 1.0;esta, este 1.0 é sempre a double. Eu acho que esse é o principal motivo.
this.myself
31

Complementando a resposta do @ NoahD

Para ter uma precisão maior, você pode converter em decimal:

(decimal)100/863
//0.1158748551564310544611819235

Ou:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Double são representados alocando 64 bits, enquanto o decimal usa 128

(double)100/863
//0.11587485515643106

Explicação detalhada da "precisão"

Para mais detalhes sobre a representação de ponto flutuante em binário e sua precisão dar uma olhada neste artigo de Jon Skeet onde ele fala sobre floatse doublese este onde ele fala sobre decimals.

fabriciorissetto
fonte
2
Errado! doubletem uma precisão de 53 bits e é um formato de ponto flutuante binário , enquanto que decimalé um ... decimal, é claro, com 96 bits de precisão . Portanto, doubleé preciso ter ~ 15-17 dígitos decimais e dígitos 28-29 decimais (e não duas vezes a precisão de double). Mais importante ainda decimal, na verdade, utiliza apenas 102 dos 128 bits
phuclv
Obrigado @phuclv, corrigiu isso. Eu quis dizer "alocação de espaço". Você estava certo sobre a precisão de decimals(96), mas doublestem 52 bits de mantissa , não 53.
fabriciorissetto
1
sim, a mantissa possui 52 bits, mas ainda existe um bit oculto, resultando em um significando de 53 bits. São 52 ou 53 bits de precisão de ponto flutuante?
phuclv
Decimal.Divide foi ótimo! Thx
Ricardo G Saraiva
10

converter os números inteiros para o dobro.

Stephen Wrighton
fonte
Para ser específico, você pode converter um número inteiro em um dobro da seguinte forma: (double) myIntegerValue
Whiplash
5

Converta um deles para o dobro primeiro. Este formulário funciona em vários idiomas:

 real_result = (int_numerator + 0.0) / int_denominator
Mark Ransom
fonte
1
Mais fácil de fazer ...var result = 1.0 * a / b;
Básico
@ Basic há 100 maneiras de fazê-lo. Eu prefiro a adição apenas porque é mais rápida, embora o elenco seja obviamente mais rápido ainda.
Mark Ransom
1
var firstNumber=5000,
secondeNumber=37;

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

Console.WriteLine(decimalResult );
Rejwanul Reja
fonte
1
A questão parece exigir doublee não decimal.
Kyle Delaney