61 votes

La division renvoie zéro

Ce calcul simple renvoie zéro, je ne peux pas le comprendre:

 decimal share = (18 / 58) * 100;

80voto

Daniel Lee Points 2273

Vous travaillez ici avec des nombres entiers. Essayez d'utiliser des décimales pour tous les nombres de votre calcul.

 decimal share = (18m / 58m) * 100m;

26voto

Petar Ivanov Points 29530

18 / 58 est une division entière, ce qui donne 0.

Si vous voulez une division décimale, vous devez utiliser des littéraux décimaux :

 decimal share = (18m / 58m) * 100m;

18voto

Sanuel Jackson Points 1041

Étant donné que certaines personnes se connectent à cela à partir de pratiquement n'importe quel fil où le résultat du calcul est un 0, j'ajoute cela comme solution car toutes les autres réponses ne s'appliquent pas aux scénarios de cas.

Le concept de devoir faire des calculs sur différents types afin d'obtenir ce type en tant que résultat s'applique, cependant ci-dessus ne montre que «décimal» et utilise sa forme abrégée telle que 18m comme l'une des variables à calculer .

 // declare and define initial variables.
int x = 0;
int y = 100;

// set the value of 'x'    
x = 44;

// Results in 0 as the whole number 44 over the whole number 100 is a 
// fraction less than 1, and thus is 0.
Console.WriteLine( (x / y).ToString() );

// Results in 0 as the whole number 44 over the whole number 100 is a 
// fraction less than 1, and thus is 0. The conversion to double happens 
// after the calculation has been completed, so technically this results
// in 0.0
Console.WriteLine( ((double)(x / y)).ToString() );

// Results in 0.44 as the variables are cast prior to calculating
// into double which allows for fractions less than 1.
Console.WriteLine( ((double)x / (double)y).ToString() );

4voto

Albin Sunnanbo Points 30722

Parce que les nombres sont des entiers et que vous effectuez une division entière.

18 / 58 est 0 en division entière.

3voto

adonthy Points 125

Chaque fois que je rencontre de telles situations, je me contente d'upcaster le numérateur.

 double x = 12.0 / 23409;
decimal y = 12m / 24309;

Console.WriteLine($"x = {x} y = {y}");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X