Согласно документации по Java 7 метод longValue из класса java.math.BigDecimal может возвращать результат с обратным знаком.
Преобразует этот BigDecimal в длинный. Это преобразование аналогично сужающему примитивному преобразованию из двойного в короткое, как определено в разделе 5.1.3 Спецификации языка Java™: любая дробная часть этого BigDecimal будет отброшена, и если результирующее «BigInteger» слишком велико, чтобы поместиться в a long возвращаются только младшие 64 бита. Обратите внимание, что это преобразование может привести к потере информации об общей величине и точности этого значения BigDecimal, а также к возвращению результата с противоположным знаком.
В каком случае это возможно?
1
. - person resueman   schedule 12.09.2016BigDecimal
будет представлена 75 битами. Он слишком большой, чтобы поместиться вlong
. Как сказано в документации, в этом случае вlong
помещаются только младшие 64 бита. Если старший из этих 64 битов равен 1, число будет отрицательным. - person jonhopkins   schedule 12.09.2016