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


282

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


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


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.


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.


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

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 );

1
A questão parece exigir doublee não decimal.
Kyle Delaney
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.