Uh, I that was a just a typo or a copy and paste mistake or
something. I get the expected result on my JVM, too.
On this subject: IIRC, Tapestry internally uses double instead of
BigDecimal in its number translator -- even if your final input
property is declared a BigDecimal or and integer type.
A prize to the first person who can uncover a bug because of this!
(Your prize is getting to make a JIRA posting.)
P
On Jan 24, 2006, at 4:15 AM, Norbert Sándor wrote:
Sounds logical to me, too... Because if it would be correct then
type "double" would be almost useless!
Maybe a bug report should be created for the given JVM (with the
details of your system) if you are REALLY sure about that result.
Regards,
Norbi
----- Original Message ----- From: "Sebastiaan van Erk"
<[EMAIL PROTECTED]>
To: "Tapestry users" <tapestry-user@jakarta.apache.org>
Sent: Tuesday, January 24, 2006 10:54 AM
Subject: Re: [OT] 3.163 + 0.001 = ???
Hi,
I'm replying a few days late, but hopefully it's still useful.
I don't understand all the people saying you should use BigDecimal
or saying that this is a double rounding problem. The BigDecimal
solution will work (that's beside the point), but that this is a
double rounding problem is incorrect and your code below *SHOULD*
work.
A double has a huge number of digits of precision, about 15 or 16
or so (this is so ridiculously precise that it could store the
circumference of the earth to within 1/1000th of the width of a
human hair precision). Since a double is stored in bits and not in
decimal digits, there is a problem representing decimal numbers
exactly. That is, there may be a small error due to the last bit
only being able to be a 0 or a 1. For example if you only had 2
bits after the decimal point you would only have (in binary) 0.00,
0.01, 0.10 and 0.11 which are 0, 0.25, 0.5, and .75 in decimal.
Thus any other decimal value would have to be converted to the
closest one of these.
However, the last bit being off means you can have a small error
in the 15th digit of precision, not in the 4th!!!
A result you could expect, and the result I in fact get when I run
your program is: c = 3.1639999999999997
This is the correct result, it is really really terribly close to
3.164, unlike 3.1679999999999997 which is just plain miles off.
I don't have an explanation for your result. It is terribly wrong!
Furthermore, as far as I know, all java virtual machines should
produce the exact same result so you should get the result that I
got above.
Greetings,
Sebastiaan
Gunna Satria wrote:
Hi All,
I tried this code:
double a = 3.163;
double b = 0.001;
double c = a+b;
System.out.println("c = "+c);
and the result is, c = 3.1679999999999997
not 3.164 like i expected
how come?
regards,
Gunna
---------------------------------
What are the most popular cars? Find out at Yahoo! Autos
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: tapestry-user-
[EMAIL PROTECTED]
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 267.14.22/238 - Release Date:
2006. 01. 23.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
_________________________________________________________________
Piano music podcast: http://inthehands.com
Other interesting stuff: http://innig.net
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]