По сути, вы делаете целочисленное деление на long
перед построением BigDecimal
.
Естественно, целочисленное деление производит еще одно long
..., которое не может представлять эти две цифры последесятичная точка.
Этого можно избежать, выполнив деление с помощью BigDecimal
:
BigDecimal bigDecimal = BigDecimal.valueOf(Long.parseLong(cvalue))
.divide(new BigDecimal(100));
Или если вам не нужно применять ограничение, согласно которому cvalue
является действительнымцелочисленное (длинное) представление:
BigDecimal bigDecimal = (new BigDecimal(cvalue))
.divide(new BigDecimal(100));
Возможно, есть лучший способ.Класс DecimalFormat
понимает все виды (локализованных) числовых форматов.Если вы создадите подходящий формат, а затем вызовете setParseBigDecimal(true)
, метод parse
этого формата создаст BigDecimal
... напрямую ... без разбивки строк, чтобы избавиться от запятой и символов точки.(И вам не нужно предполагать, что входной номер имеет ровно две цифры после десятичной дроби.)