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.
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:
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.
¡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.
Respuestas:
Quieres lanzar los números:
Nota: Si alguno de los argumentos en C # es a
double
,double
se usa una división que resulta en adouble
. Entonces, lo siguiente también funcionaría:Para más información, ver:
Dot Net Perls
fuente
double num3 = (double)(num1/num2);
. ¡Esto solo le dará una doble representación del resultado de la división entera!double
lugar defloat
? Puedo ver la pregunta,double
pero tengo curiosidad de todos modos.double
y nofloat
. Cuando escribe una variable comovar a = 1.0;
, este 1.0 siempre es undouble
. Supongo que esta es la razón principal.Complementando la respuesta de @ NoahD
Para tener una mayor precisión, puede convertir a decimal:
O:
El doble se representa asignando 64 bits mientras que el decimal usa 128
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
floats
ydoubles
y éste donde habladecimals
.fuente
double
tiene una precisión de 53 bits, y es un formato binario de coma flotante, mientras quedecimal
es ... decimal, por supuesto, con 96 bits de precisión . Entoncesdouble
es preciso a ~ 15-17 dígitos decimales y 28-29 dígitos decimales (y no el doble de precisión dedouble
). Lo más importantedecimal
es que solo usa 102 de los 128 bitsdecimals
(96), perodoubles
tiene 52 bits de mantisa , no 53.convierte los enteros en dobles.
fuente
Convierta uno de ellos a un doble primero. Este formulario funciona en muchos idiomas:
fuente
var result = 1.0 * a / b;
fuente
double
y nodecimal
.