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.
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:
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:
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.
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.
Respostas:
Você deseja converter os números:
Nota: Se qualquer um dos argumentos em C # for a
double
,double
será usada uma divisão que resultará em adouble
. Portanto, o seguinte também funcionaria:Para mais informações, veja:
Dot Net Perls
fonte
double num3 = (double)(num1/num2);
. Isso fornecerá uma representação dupla do resultado da divisão inteira!double
vez defloat
? Eu posso ver a pergunta,double
mas estou curiosa de qualquer maneira.double
e nãofloat
. Quando você escreve uma variável comovar a = 1.0;
esta, este 1.0 é sempre adouble
. Eu acho que esse é o principal motivo.Complementando a resposta do @ NoahD
Para ter uma precisão maior, você pode converter em decimal:
Ou:
Double são representados alocando 64 bits, enquanto o decimal usa 128
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
floats
edoubles
e este onde ele fala sobredecimals
.fonte
double
tem uma precisão de 53 bits e é um formato de ponto flutuante binário , enquanto quedecimal
é 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 dedouble
). Mais importante aindadecimal
, na verdade, utiliza apenas 102 dos 128 bitsdecimals
(96), masdoubles
tem 52 bits de mantissa , não 53.converter os números inteiros para o dobro.
fonte
Converta um deles para o dobro primeiro. Este formulário funciona em vários idiomas:
fonte
var result = 1.0 * a / b;
fonte
double
e nãodecimal
.