Преобразование BigDecimal в целое число



У меня есть метод Hibernate, который возвращает мне BigDecimal.
У меня есть другой метод API, к которому мне нужно передать это число, но он принимает целое число в качестве параметра. Я не могу изменить типы возвращаемых значений или типы переменных обоих методов.



теперь как преобразовать BigDecimal в целое число и передать его во второй метод?



есть ли выход из этого?

699   8  

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.

следующий должен сделать трюк:

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

вы пробовали звонить BigInteger#intValue () ?

Я обнаружил, что выше не работает для меня. Я вытаскивал значение ячейки из JTable, но не мог привести к double или int и т. д. Мое решение:

Object obj = getTable().getValueAt(row, 0);

где строка 0 всегда будет числом. Надеюсь, это поможет кому-нибудь еще прокрутки!

Comments

    Ничего не найдено.