¿Cómo puedo dividir dos enteros para obtener un doble?

Respuestas:

460

Quieres lanzar los números:

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

Nota: Si alguno de los argumentos en C # es a double, doublese usa una división que resulta en a double. Entonces, lo siguiente también funcionaría:

double num3 = (double)num1/num2;

Para más información, ver:

Dot Net Perls

NoahD
fuente
3
No sé si esto es lo mismo en C #, pero C solo requiere que lances el primero; automáticamente hará doble / int un doble.
paxdiablo
44
@Pax, si alguno de los argumentos en C o C # es un doble, se usa una doble división (lo que resulta en un doble).
extraño
32
Tenga cuidado de no hacer esto: - double num3 = (double)(num1/num2);. ¡Esto solo le dará una doble representación del resultado de la división entera!
The Lonely Coder
Suponiendo que no necesita la precisión adicional, ¿hay alguna razón para lanzar en doublelugar de float? Puedo ver la pregunta, doublepero tengo curiosidad de todos modos.
Kyle Delaney
@KyleDelaney Solo porque en C # normalmente usamos doubley no float. Cuando escribe una variable como var a = 1.0;, este 1.0 siempre es un double. Supongo que esta es la razón principal.
this.myself
31

Complementando la respuesta de @ NoahD

Para tener una mayor precisión, puede convertir a decimal:

(decimal)100/863
//0.1158748551564310544611819235

O:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

El doble se representa asignando 64 bits mientras que el decimal usa 128

(double)100/863
//0.11587485515643106

Explicación profunda de la "precisión"

Para más detalles acerca de la representación de coma flotante en binario y su precisión echar un vistazo a este artículo de Jon Skeet donde habla de floatsy doublesy éste donde habla decimals.

fabriciorissetto
fuente
2
¡Incorrecto! doubletiene una precisión de 53 bits, y es un formato binario de coma flotante, mientras que decimales ... decimal, por supuesto, con 96 bits de precisión . Entonces doublees preciso a ~ 15-17 dígitos decimales y 28-29 dígitos decimales (y no el doble de precisión de double). Lo más importante decimales que solo usa 102 de los 128 bits
phuclv
Gracias @phuclv, arreglé eso. Me refería a "asignación de espacio". Tenías razón sobre la precisión de decimals(96), pero doublestiene 52 bits de mantisa , no 53.
fabriciorissetto
1
Sí, la mantisa tiene 52 bits, pero todavía hay un bit oculto, lo que resulta en un significado de 53 bits. ¿Son 52 o 53 bits de precisión de coma flotante?
phuclv
Decimal.Divide fue genial! Thx
Ricardo G Saraiva
10

convierte los enteros en dobles.

Stephen Wrighton
fuente
Para ser específicos, puede convertir un número entero en un doble de la siguiente manera: (doble) myIntegerValue
Whiplash el
5

Convierta uno de ellos a un doble primero. Este formulario funciona en muchos idiomas:

 real_result = (int_numerator + 0.0) / int_denominator
Mark Ransom
fuente
1
Más fácil de hacer ...var result = 1.0 * a / b;
Básico
@Basic hay 100 formas de hacerlo. Prefiero la adición solo porque es más rápido, aunque el lanzamiento es obviamente aún más rápido.
Mark Ransom
1
var firstNumber=5000,
secondeNumber=37;

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

Console.WriteLine(decimalResult );
Rejwanul Reja
fuente
1
La pregunta parece pedir doubley no decimal.
Kyle Delaney