En Java, je travaille avec la classe BigDecimal
et une partie de mon code me demande d'en extraire la partie fractionnaire. BigDecimal
ne semble pas avoir de méthodes intégrées pour m'aider à obtenir le nombre après la virgule décimale d'un BigDecimal
.
Par exemple:
BigDecimal bd = new BigDecimal("23452.4523434");
Je veux extraire le 4523434
à partir du nombre représenté ci-dessus. Quelle est la meilleure façon de procéder?
Si la valeur est négative, l'utilisation de bd.subtract()
renverra une décimale incorrecte.
tilisez ceci:
BigInteger decimal =
bd.remainder(BigDecimal.ONE).movePointRight(bd.scale()).abs().toBigInteger();
Il renvoie 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.stripTrailingZeros();
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 partie fraction est positive:
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())).abs();
Cela renvoie "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();
Ça ne marche pas !!!
BigDecimal d = BigDecimal.valueOf(23452.4523434);
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
Lorsque vous entrez un nombre, quelle partie fractionnaire commence par '0', par exemple. "123.00456". Vous obtenez "456" au lieu de "00456". Cela se produit parce que nous le convertissons .toBigInteger()
, et les premiers zéros viennent de disparaître; Si vous utilisez .toString()
au lieu de .toBigInteger()
, vous obtenez 456.00000, c'est mal aussi!
Donc, mon conseil est en utilisant cela:
BigDecimal fractPart = bd.remainder(BigDecimal.ONE);
StringBuilder sb = new StringBuilder(fractPart.toString());
sb.delete(0, 2);
String str = sb.toString();
Et puis utilisez simplement cette str
comme vous voulez