Java, extraire seulement la partie fractionnaire d’un BigDecimal?

En Java, je travaille avec la classe BigDecimal et une partie de mon code exige que j’en extrait la partie fractionnaire. BigDecimal ne semble pas avoir de méthodes intégrées pour m’aider à obtenir le nombre après le point décimal d’un BigDecimal .

Par exemple:

 BigDecimal bd = new BigDecimal("23452.4523434"); 

Je veux extraire le 4523434 du nombre représenté ci-dessus. Quelle est la meilleure façon de le faire?

Je voudrais essayer bd.remainder(BigDecimal.ONE) .

Utilise la méthode remainder et la constante ONE .

 BigDecimal bd = new BigDecimal( "23452.4523434" ); BigDecimal fractionalPart = bd.remainder( BigDecimal.ONE ); // Result: 0.4523434 

Si la valeur est négative, l’utilisation de bd.subtract() renverra une décimale incorrecte.

Utilisez ceci :

 BigInteger decimal = bd.remainder(BigDecimal.ONE).movePointRight(bd.scale()).abs().toBigInteger(); 

Il retourne 4523434 pour 23452.4523434 ou -23452.4523434


De plus, si vous ne voulez pas de zéros supplémentaires à droite de la partie fractionnaire, utilisez:

 bd = bd.ssortingpTrailingZeros(); 

avant le code précédent.

Voici une alternative à l’utilisation de la méthode remainder() :

 BigDecimal bd = new BigDecimal("23452.4523434"); BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())); 

De plus, vous pouvez essayer la méthode abs () pour vous assurer que la fraction est positive:

 BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())).abs(); 

Ce retour “4523434”, même si vous définissez le nombre en négatif “-23452.4523434”.

  BigDecimal d = BigDecimal.valueOf(23452.4523434); BigInteger decimal = d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();