# Converting BigDecimal to long with rounding

Janek Kowalski
Greenhorn
Posts: 3
Hello Everybody,

I have problem with converting BigDecimal value to long value but with rounding applied (HALF_UP). i.e:
I have BigDecimal:

After covering I'd like l to have value 13, so method longValue doesn't help.
I use following trick but I'm not happy about it, maybe there is better way to do this?

greetings
j.k.

Rob Spoor
Sheriff
Posts: 20707
68
Try rounding the BigDecimal first, then calling its longValue() method:
The rounding takes the precision (number of digits) minus the number of decimals. This may go wrong if the rounding adds a digit (e.g. from 99.5 to 100), but initial tests show no problem.

Till Stoschus
Greenhorn
Posts: 14
Hi Janek,

if you expect that the 1st decimal place should decide rounding, then this could be a solution:

Till

Janek Kowalski
Greenhorn
Posts: 3
Thank you very much .

Both solutions work fine.

greetings
j.k.

Rob Spoor
Sheriff
Posts: 20707
68
I would prefer Till's solution. It handles cases like the jump form 99.xx to 100 better.

Janek Kowalski
Greenhorn
Posts: 3
Rob Prime wrote:I would prefer Till's solution. It handles cases like the jump form 99.xx to 100 better.

I've chosen Till's solution because using this I create one object less (MathContext) but when I've changed rounding mode to HALF_UP in yours solution it worked pretty the same. (99.7 was converted to 100 properly). Perhaps I'm missing something.

greetings
j.k.