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.