Преобразование BigDecimal в целое число
У меня есть метод Hibernate, который возвращает мне BigDecimal.
У меня есть другой метод API, к которому мне нужно передать это число, но он принимает целое число в качестве параметра. Я не могу изменить типы возвращаемых значений или типы переменных обоих методов.
теперь как преобразовать BigDecimal в целое число и передать его во второй метод?
есть ли выход из этого?
8 ответов:
вы могли бы назвать
myBigDecimal.intValueExact()(или простоintValue()) и это даже вызовет исключение, если вы потеряете информацию. Это возвращает int, но autoboxing заботится об этом.
можете ли вы гарантировать, что
BigDecimalникогда не будет содержать значение большеInteger.MAX_VALUE?если да, то вот ваш код вызова
intValue:Integer.valueOf(bdValue.intValue())
TL; DR
используйте один из них для универсальных потребностей преобразования
//Java 7 or below bigDecimal.setScale(0, RoundingMode.DOWN).intValueExact() //Java 8 bigDecimal.toBigInteger().intValueExact()мышление
ответ зависит от того, какие требования и как вы ответите на эти вопросы.
- будет
BigDecimalпотенциально имеют ненулевую дробную часть?- будет
BigDecimalпотенциально не вписывается в
Ну, вы могли бы назвать
BigDecimal.intValue():преобразует этот BigDecimal в int. Это преобразование аналогично сужающему примитивному преобразованию из double в short, как определено в спецификации языка Java: любая дробная часть этого BigDecimal будет отброшена, и если результирующий "BigInteger" слишком велик, чтобы поместиться в int, возвращаются только младшие 32 бита. Обратите внимание, что это преобразование может потерять информацию о полной величине и точность этого BigDecimal значения, а также возвращает результат с противоположным знаком.
вы можете либо явно вызвать
Integer.valueOf(int)или пусть auto-boxing сделает это за вас, если вы используете достаточно новую версию Java.
вы пробовали звонить BigInteger#intValue () ?
Я обнаружил, что выше не работает для меня. Я вытаскивал значение ячейки из JTable, но не мог привести к double или int и т. д. Мое решение:
Object obj = getTable().getValueAt(row, 0);где строка 0 всегда будет числом. Надеюсь, это поможет кому-нибудь еще прокрутки!
Comments