• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Paul Clapham
  • Ron McLeod
  • Jeanne Boyarsky
  • Tim Cooke
Sheriffs:
  • Liutauras Vilda
  • paul wheaton
  • Henry Wong
Saloon Keepers:
  • Tim Moores
  • Tim Holloway
  • Stephan van Hulst
  • Carey Brown
  • Frits Walraven
Bartenders:
  • Piet Souris
  • Himai Minh

adding big decimal numbers

 
Ranch Hand
Posts: 100
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hi all,
here is a problem while adding big decimal numbers.can anyone help me pls.
double d1 = 999999999999.11;
double d2 = 9.11;
double d4 = (d1 + d2);
System.out.println(" Adding big double numbers:::"+d4);
// this will give me o/p as :: 1.00000000000822E12

but i am interested in getting the exact value.
pls help me.
thanks & regards,
Mahesh
 
author
Posts: 4323
39
jQuery Eclipse IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm surprised you're getting scientific notation for this by default, although somewhere I believe there exists a setting for this? Anyone?

Regardless, you can use the NumberFormat/DecimalFormat utility classes to display as you want:

http://java.sun.com/j2se/1.4.2/docs/api/java/text/DecimalFormat.html

By the way, you mentioned the 'exact' value, technically d4 represents the exact value, it just displays in non-useful format. If you want to perform operations on the 'exact' value, you should still use d4. Only use the formatter to display the data on the screen to the user.
[ November 09, 2005: Message edited by: Scott Selikoff ]
 
Java Cowboy
Posts: 16084
88
Android Scala IntelliJ IDE Spring Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
If you want to do exact calculations with decimal numbers, you'd better use class java.math.BigDecimal instead of double. double has a limited accuracy.
 
Ranch Hand
Posts: 657
Spring VI Editor Clojure
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

but i am interested in getting the exact value.



Some things you should know about floating-point arithmetic
What Every Computer Scientist Should Know About Floating-Point Arithmetic
 
(instanceof Sidekick)
Posts: 8791
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You've bumped into two problems.

First, it's not possible to represent many fractions precisely in binary. Almost no computer languages or calculators will do this: (1 / 3) * 3 = 1. On the other hand most do (1 * 3) / 3 pretty well because there are no fractions involved.

Second, floats and doubles have two parts, sometimes called significand and exponent. The value is the significand times 2 raised to the exponent power. Since you get 8 or 11 bits of exponent you can multiply out some very large numbers. But the significand has only 23 or 52 bits so you can only have so many digits before you multiply. If you have more digits of precision than fit into those bits, some digits are lost.

Floats are good for the distance between galaxies or the size of an electron, but lousy for Bill Gates's checking account.
 
Those who dance are thought mad by those who hear not the music. This tiny ad plays the bagpipes:
Free, earth friendly heat - from the CodeRanch trailboss
https://www.kickstarter.com/projects/paulwheaton/free-heat
reply
    Bookmark Topic Watch Topic
  • New Topic