Ich habe eine Hibernate-Methode, die mir ein BigDecimal zurückgibt. Ich habe eine andere API-Methode, an die ich diese Nummer übergeben muss, aber sie akzeptiert Integer als Parameter. Ich kann die Rückgabetypen oder Variablentypen beider Methoden nicht ändern.
Wie konvertiere ich nun BigDecimal in Integer und übergebe es an die zweite Methode?
Gibt es einen Ausweg?
java
integer
casting
bigdecimal
Vishal
quelle
quelle
Antworten:
Sie würden anrufen
myBigDecimal.intValueExact()
(oder nurintValue()
) und es wird sogar eine Ausnahme auslösen, wenn Sie Informationen verlieren würden. Das gibt ein int zurück, aber Autoboxing kümmert sich darum.quelle
intValueExact()
ist eine gute Empfehlung; es wurde in 1.5intValue()
ist gefährlich, es sei denn, Sie setzen zu 100% darauf, dass die Nummer innerhalb desInteger
Bereichs liegt.Können Sie garantieren, dass der
BigDecimal
niemals einen Wert größer als enthält?Integer.MAX_VALUE
?Wenn ja, dann ist hier Ihr Code
intValue
:quelle
TL; DR
Verwenden Sie eine davon für universelle Konvertierungsanforderungen
Argumentation
Die Antwort hängt davon ab, welche Anforderungen gestellt werden und wie Sie diese Frage beantworten.
BigDecimal
potenziell einen Bruchteil ungleich Null haben?BigDecimal
möglicherweise nicht in denInteger
Bereich?Wenn Sie die ersten beiden Fragen mit Nein beantwortet haben, können Sie sie einfach
BigDecimal.intValueExact()
wie von anderen vorgeschlagen verwenden und in die Luft jagen lassen, wenn etwas Unerwartetes passiert.Wenn Sie in Bezug auf Frage 2 nicht absolut 100% sicher sind,
intValue()
ist dies immer die falsche Antwort.Es besser machen
Verwenden wir die folgenden Annahmen basierend auf den anderen Antworten.
intValueExact()
tun Auto-BoxingBigDecimal
Wert größer als derInteger
Bereich ist, da alles andere verrückt wäre, es sei denn, Sie haben einen ganz bestimmten Bedarf an dem Umlauf, der auftritt, wenn Sie die höherwertigen Bits ablegen.Wenn diese Parameter gegeben sind, wird
intValueExact()
eine Ausnahme ausgelöst, wenn dies nicht gewünscht wird, wenn unser Bruchteil nicht Null ist. Auf der anderen SeiteintValue()
wirft keine Ausnahme, wenn es sollte, wenn unsereBigDecimal
zu groß ist.Um das Beste aus beiden Welten zu erhalten, runden Sie die
BigDecimal
erste ab und konvertieren Sie dann. Dies hat auch den Vorteil, dass Sie mehr Kontrolle über den Rundungsprozess haben.Spock Groovy Test
quelle
Nun, Sie könnten anrufen
BigDecimal.intValue()
:Sie können dann entweder explizit aufrufen
Integer.valueOf(int)
oder Auto-Boxing für Sie erledigen lassen, wenn Sie eine ausreichend aktuelle Version von Java verwenden.quelle
Folgendes sollte den Trick machen:
quelle
Haben Sie versucht, BigInteger # intValue () aufzurufen ?
quelle
Siehe BigDecimal # intValue ()
quelle
Ich stellte fest, dass das oben genannte für mich nicht funktionierte. Ich habe einen Zellenwert aus einer JTable gezogen, konnte ihn jedoch nicht in double oder int usw. umwandeln. Meine Lösung:
Dabei wäre Zeile 0 immer eine Zahl. Hoffe das hilft jedem noch beim Scrollen!
quelle