web-dev-qa-db-fra.com

Comment diviser deux variables longues en java

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;
24
Arulmurugan

Valeurs littérales et arithmatique littérale

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.

29
Rudi Kershaw
final long a = 3004230;
final long b = 6793368;
final double c = ((double) a / b) * 100;

=> c = 44,22298335670907

3
Cengiz

é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

2
rock321987

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
2
whhotw

Vous pouvez faire de même sans transtyper vers un float:

long a =  3004230L;
long b =  6793368L;
long c = (a * 100L)/b;
1
vz0

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.

0
sona

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