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


282

¿Cómo divido dos enteros para obtener un doble?


10
Suponiendo que esto se haya pedido en una entrevista, la división de enteros siempre resulta en un entero. Debe usar un tipo de molde como los que se muestran a continuación.
Sesh

2
Diferentes tipos de divisiones: Entero, coma flotante, decimal-discutido en ¿Por qué la división entera en c # devuelve un entero pero no un flotante?
Michael Freidgeim

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


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.


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.


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

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

1
La pregunta parece pedir doubley no decimal.
Kyle Delaney
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.