126 votes

Conversion de BigDecimal en Integer

J'ai une méthode Hibernate qui me renvoie un BigDecimal. J'ai une autre méthode API à laquelle je dois passer ce nombre mais elle accepte Integer comme paramètre. Je ne peux pas modifier les types de retour ou les types de variables des deux méthodes.

Maintenant, comment convertir le BigDecimal en Integer et le passer à la deuxième méthode ?

Y a-t-il un moyen de s'en sortir ?

201voto

willcodejavaforfood Points 20365

Vous appelleriez myBigDecimal.intValueExact() (ou simplement intValue()) et il lancera même une exception si vous perdez des informations. Cela renvoie un int mais l'autoboxing s'en occupe.

32voto

Anon Points 1946

Pouvez-vous garantir que le BigDecimal ne contiendra jamais une valeur supérieure à Integer.MAX_VALUE ?

Si oui, alors voici votre code :

Integer.valueOf(bdValue.intValue())

17voto

Jon Skeet Points 692016

Eh bien, vous pourriez appeler BigDecimal.intValue() :

Convertit ce BigDecimal en un int. Cette conversion est analogue à une conversion primitive de double à court, telle que définie dans la spécification du langage Java : toute partie fractionnelle de ce BigDecimal sera rejetée, et si le "BigInteger" résultant est trop grand pour tenir dans un int, seuls les 32 bits de poids faible sont retournés. Notez que cette conversion peut perdre des informations sur la magnitude et la précision globales de cette valeur BigDecimal et renvoyer un résultat de signe opposé.

Vous pouvez alors soit appeler explicitement Integer.valueOf(int) ou laissez la boîte automatique le faire pour vous si vous utilisez une version suffisamment récente de Java.

9voto

Gareth Davis Points 16190

Ce qui suit devrait faire l'affaire :

BigDecimal d = new BigDecimal(10);
int i = d.intValue();

1voto

Riduidel Points 13456

Avez-vous essayé d'appeler BigInteger#intValue() ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X