En supposant que cela a été demandé dans une interview - la division entière donne toujours un entier. Vous devez utiliser un type de fonte comme ceux illustrés ci-dessous.
Je ne sais pas si c'est la même chose en C #, mais C ne vous demande que de lancer le premier - cela fera automatiquement double / int un double.
paxdiablo
4
@Pax, si l'un des arguments en C ou C # est un double, une double division est utilisée (résultant en un double).
strager
32
Attention à ne pas faire cela: - double num3 = (double)(num1/num2);. Cela vous donnera juste une double représentation du résultat de la division entière!
The Lonely Coder
En supposant que vous n'ayez pas besoin d'une précision supplémentaire, y a-t-il une raison de lancer au doublelieu de float? Je vois que la question se pose doublemais je suis quand même curieux.
Kyle Delaney
@KyleDelaney Juste parce qu'en C # nous utilisons normalement doubleet non float. Lorsque vous écrivez une variable comme var a = 1.0;, ce 1.0 est toujours un double. Je suppose que c'est la principale raison.
this.myself
31
Compléter la réponse de @ NoahD
Pour avoir une plus grande précision, vous pouvez convertir en décimal:
Les doubles sont représentés en allouant 64 bits tandis que la décimale utilise 128
(double)100/863//0.11587485515643106
Explication approfondie de la "précision"
Pour plus de détails sur la représentation en virgule flottante en binaire et sa précision, consultez cet article de Jon Skeet où il parle floatset doubleset celui-ci où il parle decimals.
Faux! doublea une précision de 53 bits, et c'est un format binaire à virgule flottante, alors qu'il decimalest ... décimal, bien sûr, avec 96 bits de précision . Il doubleest donc précis à ~ 15-17 chiffres décimaux et 28-29 chiffres décimaux (et pas deux fois la précision de double). Plus important decimalencore, n'utilise que 102 des 128 bits
phuclv
Merci @phuclv, corrigé cela. Je voulais dire "allocation d'espace". Vous aviez raison de la précision de decimals(96), mais doublesa 52 bits de mantisse , et non 53.
Réponses:
Vous voulez lancer les chiffres:
Remarque: Si l'un des arguments en C # est a
double
, unedouble
division est utilisée, ce qui donne adouble
. Donc, ce qui suit fonctionnerait aussi:Pour plus d'informations, voir:
Dot Net Perls
la source
double num3 = (double)(num1/num2);
. Cela vous donnera juste une double représentation du résultat de la division entière!double
lieu defloat
? Je vois que la question se posedouble
mais je suis quand même curieux.double
et nonfloat
. Lorsque vous écrivez une variable commevar a = 1.0;
, ce 1.0 est toujours undouble
. Je suppose que c'est la principale raison.Compléter la réponse de @ NoahD
Pour avoir une plus grande précision, vous pouvez convertir en décimal:
Ou:
Les doubles sont représentés en allouant 64 bits tandis que la décimale utilise 128
Explication approfondie de la "précision"
Pour plus de détails sur la représentation en virgule flottante en binaire et sa précision, consultez cet article de Jon Skeet où il parle
floats
etdoubles
et celui-ci où il parledecimals
.la source
double
a une précision de 53 bits, et c'est un format binaire à virgule flottante, alors qu'ildecimal
est ... décimal, bien sûr, avec 96 bits de précision . Ildouble
est donc précis à ~ 15-17 chiffres décimaux et 28-29 chiffres décimaux (et pas deux fois la précision dedouble
). Plus importantdecimal
encore, n'utilise que 102 des 128 bitsdecimals
(96), maisdoubles
a 52 bits de mantisse , et non 53.transformez les entiers en doubles.
la source
Convertissez l'un d'eux en double d'abord. Ce formulaire fonctionne dans de nombreuses langues:
la source
var result = 1.0 * a / b;
la source
double
et nondecimal
.