Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / February 2006

Tip: Looking for answers? Try searching our database.

Bigdecimal division problem

Thread view: 
manzur - 23 Feb 2006 10:37 GMT
For the below Code snippet  iam expecting 3333333.4 but iam getting
4E+6.Could any one help me to understand the logic. thanks in advance

BigDecimal quotient  = BigDecimal.valueOf(10000000.0).divide(new
BigDecimal(3),RoundingMode.CEILING);
Bart Cremers - 23 Feb 2006 10:54 GMT
You'll need to set the scaling on your BigDecimal to the correct value
before working on it. The way BigDecimal works is that it sets the
scale to:

"The scale of the returned BigDecimal is the smallest value such that
(10scale × val) is an integer."

In your case this is -6. Set the scale to 1 to get what you want:

BigDecimal quotient  =
BigDecimal.valueOf(10000000.0).setScale(1).divide(new
BigDecimal(3),RoundingMode.CEILING);

Bart
manzur - 23 Feb 2006 11:33 GMT
bart

>From the ApI i found that
 If zero or positive, the scale is the number of digits to the right
of the decimal point. If negative, the unscaled value of the number is
multiplied by ten to the power of the negation of the scale. The value
of the number represented by the BigDecimal is therefore (unscaledValue
× 10-scale).

So i think that there is no need to set the scale explicitly for
positive numbers and the dividend in my code is also positive.
Bart Cremers - 23 Feb 2006 11:55 GMT
The sentence in quotes comes from the API as well. It's sometimes a
problem to find the correct documentation in the API docs.

But anyway, you get what you want... :)

Bart
Patricia Shanahan - 23 Feb 2006 16:03 GMT
> bart
>
[quoted text clipped - 7 lines]
> So i think that there is no need to set the scale explicitly for
> positive numbers and the dividend in my code is also positive.

The "zero or positive" refers the scale, not the number.
BigDecimal.valueOf(10000000.0) is equivalent to new BigDecimal("1.0E7")
and so has scale -6, unscaled value 10.

Using a double literal in BigDecimal valueOf is equivalent to conversion
of the string representation of the literal to a double, conversion of
the double to a String, and construction of a BigDecimal from that
String. There is a risk of rounding errors, as well as unintended scaling.

Unless there is some specific reason to involve doubles, I generally
find it better to stick to direct construction from a String:

    new BigDecimal("10000000")

Patricia
manzur - 23 Feb 2006 11:34 GMT
bart
but iam getting wht i want by following your process


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.