2013-07-02 3 views
4

Je sais que dans Java, un int peut obtenir une valeur de 2 147 483 647. Mais je veux plus de valeur que cela. J'ai une formule par exemple:Comment obtenir une valeur entière supérieure à la valeur entière maximale

double x = a/(b*c); 

donc le dénominateur (b * c) peut atteindre à 10^10 ou peut-être même plus que cela. Mais chaque fois que j'exécute la formule, la valeur est toujours limitée à 2 147 483 647. Je sais parce que x doit toujours être inférieur à 1.0. P/S: Même la variable "a" peut aussi atteindre 10^10 si certaines conditions sont remplies. a, b, c sont tous des nombres entiers.

+0

Utilisez-vous un int ou un double? Lorsque vous exécutez la formule et que toutes les variables sont doubles, vous ne devez pas atteindre cette limite. –

Répondre

6

Depuis vous l'avez demandé, voici un exemple BigInteger:

BigInteger a = new BigInteger("yourNumberInStringFormA"); 
BigInteger b = new BigInteger("yourNumberInStringFormB"); 
BigInteger c = new BigInteger("yourNumberInStringFormC"); 

BigInteger x = a.divide(b.multiply(c)); 

"yourNumberInStringForm" est un signe moins en option et des chiffres (pas espaces ou des virgules). Par exemple BigInteger z = new BigIntger("-3463634"); NB: BigInteger retournera effectivement un long pour vous si votre numéro est dans sa gamme. longs fin en L, comme dans:

long num = 372036854775807L; 

La longueur maximale d'un long est: 9.223.372.036.854.775.807. Si vos nombres vont être moins que cela, cela va rendre votre vie plus facile à utiliser long ou Long, son emballage, sur BigInteger. Depuis long, vous n'avez pas besoin d'utiliser des méthodes pour diviser/multiplier, etc.

+0

oh si fondamentalement, la valeur BigInteger également limitée par longue portée.Donc je ferais mieux d'utiliser le type long car ma valeur ne peut atteindre que 9 x 10^10 – Nexus

+1

Non, j'ai fait un montage. 'BigInteger' retournera un' long' pour vous quand votre nombre est plus petit qu'un 'long'. Traiter avec 'longs' est beaucoup plus facile que BigInteger. Étant donné que vos nombres sont inférieurs au maximum 'long', vous devez utiliser' long' sur 'BigInteger'. –

2

utilisation d'un type longue, encore un type entier, mais sa valeur maximale est supérieure à int

3

La valeur max int est un langage Java constant. Si vous voulez des nombres réels plus grands que ce que fournit int, utilisez long. Si vous avez besoin des entiers supérieurs à ce que int et long fournissent, vous pouvez utiliser BigInteger:

BigInteger a = new BigInteger("9"); 
BigInteger b = new BigInteger("3"); 
BigInteger c = a.add(b); // c.equals(new BigInteger("12"), a and b are unchanged 

BigInteger est immuable comme Long et Integer, mais vous ne pouvez pas utiliser les symboles habituels de l'opérateur. Au lieu de cela, utilisez le methods provided par la classe. Je remarque également que vous finissez avec un double. Si vous pouvez utiliser des doubles dans votre formule, notez que leur valeur maximale est: 1.7976931348623157 E 308

Read more about java language constants.

+0

Je fais une recherche et je vois qu'il y a un type appelé BigInteger. Comment puis-je l'utiliser? – Nexus

Questions connexes