[DLSLUG-Discuss] Java fluke, double precision pitfall

Python e-mail addresses are not shown in archives
Thu Dec 29 10:29:04 EST 2005


Base 10 fractions can not be stored exactly in binary representations.
Here is the Python equivalent:

>>> .2
0.20000000000000001
>>> str(.2)
'0.2'
>>> 1.2 - 1.0
0.19999999999999996
>>> str(1.2 - 1.0)
'0.2'

Note that the string function rounds sensibly.  Most languages will
provide a means to see the value as it would be (naively) expected to
appear.

On Thu, 2005-12-29 at 08:39 -0500, Anne Stanton wrote:
> This is fairly common in many of the core systems. I noticed it during
> year 2000, when programming had to make changes not to our code, but to
> modules supplied by other vendors. It also causes difficulty when
> reconciling to 0 in some of the more advanced accounting software
> systems. 
Dollar values should be stored as decimals (or fixed point integers).
Binary floating point values can not be expected to equal the decimal
equivalents.  In ternary, 0.1 == 1/3, but can not be expressed exactly
in decimal where you get 0.33333333.

> As you develop new programs add to your plate this awareness. 
> 
> Happy New Year everyone!! 
> 
> 
> Anne Stanton, MVP/CRM, MBA/ACC
> President
> The Norwich Group
> www.thenorwichgroup.com
> 802-526-1023
>  
> 
> -----Original Message-----
> From: [e-mail addresses are not shown in archives]
> [mailto:[e-mail addresses are not shown in archives]] On Behalf Of Roger
> Sent: Thursday, December 29, 2005 4:00 AM
> To: [e-mail addresses are not shown in archives]
> Subject: [DLSLUG-Discuss] Java fluke, double precision pitfall
> 
> 
> Hello everyone,
> 
> Yes, I'm still a Java nut, but...
> 
> While I was getting beaten in a TopCoder contest, I discovered this
> fluke.
> 
> I reduced the "fluke" to a few lines of code as possible.
> When I ran the enclosed program, I got the following output.
> 
> 1.2 minus 1.0 = 0.19999999999999996
> 
> I'm able to find ways around this by type casting and using the
> BigDecimal object. I just thought I would share this random tid bit with
> you guys.
> 
> -Roger
> 
> _______________________________________________
> DLSLUG-Discuss mailing list
> [e-mail addresses are not shown in archives]
> http://dlslug.org/mailman/listinfo/dlslug-discuss
-- 
Lloyd Kvam
Venix Corp




More information about the DLSLUG-Discuss mailing list