This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Converting BigDecimal to long with rounding Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Converting BigDecimal to long with rounding" Watch "Converting BigDecimal to long with rounding" New topic
Author

Converting BigDecimal to long with rounding

Janek Kowalski
Greenhorn

Joined: Jun 06, 2009
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

Joined: Oct 27, 2005
Posts: 19656
    
  18

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.


SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6
How To Ask Questions How To Answer Questions
Till Stoschus
Greenhorn

Joined: May 28, 2009
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

Joined: Jun 06, 2009
Posts: 3
Thank you very much .

Both solutions work fine.

greetings
j.k.
Rob Spoor
Sheriff

Joined: Oct 27, 2005
Posts: 19656
    
  18

I would prefer Till's solution. It handles cases like the jump form 99.xx to 100 better.
Janek Kowalski
Greenhorn

Joined: Jun 06, 2009
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.
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Converting BigDecimal to long with rounding
 
Similar Threads
Class cast on Object Array
BigDecimal rounding problem
What actual Double.toString(double d) does?
Lost precision when do number format
Rounding using BigDecimal