Désolé pour la question de base, je dois diviser la variable longue par une autre variable longue, mais elle renvoie 0. Quelqu'un peut-il aider
long a = 3004230;
long b = 6793368;
long c = (a/b)*100;
Il y a quelques problèmes avec ce code. Tout d'abord, les valeurs littérales à virgule non flottante sont de type int
par défaut et donc 3004230
dans votre code est un int
. Pour le déclarer explicitement un long
, utilisez 3004230L
au lieu.
De plus, toute l'arithmétique effectuée avec des littéraux à virgule non flottante renvoie un résultat int
sauf si elle est castée spécifiquement en un type à virgule flottante tel que float
ou double
. En tant que tel (a/b)*100
est inférieur à 1, et est donc tronqué à 0 (les valeurs à virgule flottante sont juste coupées). De plus, même s'il a renvoyé le même résultat, vous essayez de le stocker dans un long
qui ne peut pas stocker de valeurs à virgule flottante.
Donc, vous devriez faire quelque chose comme ceci pour obtenir le vrai résultat.
long a = 3004230L; // Use the L notation to declare this literal a long.
long b = 6793368L;
double c = ((double)a/b)*100; /* casting your division result to (double) means
the result will not be 0 */
J'espère que ça aide.
final long a = 3004230;
final long b = 6793368;
final double c = ((double) a / b) * 100;
=> c = 44,22298335670907
évidemment, la réponse sera 0
pour ci-dessus .. comme vous pouvez le voir lorsque vous divisez
3004230/6793368 = 0,442 = 0 (lors de la conversion en type
long
)
et
0 * n'importe quel nombre = 0 ..
pour le convertir, utilisez ce
double c = (a * 1.0/b)*100.0;
vous devez utiliser un type de données qui peut stocker decimal
une valeur qui est float
ou double
..long
ne peut pas stocker de nombres décimaux
essayez-le.
long a = 3004230;
long b = 6793368;
long c = ((long)((float)a/(float)b)*100); //answer=44
float c = ((long)((float)a/(float)b)*100); //answer=44.1256378
Vous pouvez faire de même sans transtyper vers un float
:
long a = 3004230L;
long b = 6793368L;
long c = (a * 100L)/b;
Le long c que vous créez n'est pas la valeur que vous attendiez. C'est dans la plage entière. Pour créer des longs, utilisez
long final c = 3004230L * 6793368L; En ajoutant un L après le littéral numérique, vous dites au compilateur de le compiler en tant que long au lieu d'un entier.
Ce que vous faites actuellement, c'est une division entière. Cela retournera toujours un résultat entier/long. Vous devez utiliser un flottant ou un double pour obtenir un résultat en virgule flottante même si vous le restituez ensuite en valeurs entières.
long c = (long)(a/(float)b*100);