Don't take this the wrong way, but please don't email me this stuff
directly, please follow the procedure of creating a patch with cvs diff
-u and posting it in bugzilla with [PATCH] in the subject. You've
tracked down a much needed bugfix, but sending it to me is the slowest
possible way to get it applied.
-Andy "the POI bottleneck"
Rolf-J�rgen Moll wrote:
>Dear Oliver,
>
>we are using POI to import data from excel sheets into our application
>(financial accounting and planning).
>
>
>It seems that I found a bug in the decodeNumber-methods of RKRecord and
>MulRKRecord. When you try to read out the value 9324.62 from a cell, without
>my modifications it will be encoded to 9324.625!
>
>With the modifications it works properly!
>
>It would be great if you could update the source in the POI-project and if
>you could inform me about this.
>
>Open source is really great! If there's a bug, you have the chance to find
>and fix it.
>
>
>The proper code is for both classes RKRecord and MulRKRecord:
>
> private static double decodeNumber(int number)
> {
> long raw_number = number;
>
> // mask off the two low-order bits, 'cause they're not part of
> // the number
> // old: raw_number &= -3;
> raw_number = raw_number >> 2; // new
>
> double rvalue = 0;
>
> if ((number & 0x02) == 0x02)
> {
>
> // ok, it's just a plain ol' int; we can handle this
> // trivially by right-shifting and casting
> // old: rvalue = ( double ) (raw_number >> 2);
> rvalue = ( double ) (raw_number); // new
> }
> else
> {
>
> // also trivial, but not as obvious ... left shift the
> // bits high and use that clever static method in Double
> // to convert the resulting bit image to a double
> // old rvalue = Double.longBitsToDouble(raw_number << 32);
> rvalue = Double.longBitsToDouble(raw_number << 34);
> }
> if ((number & 0x01) == 0x01)
> {
>
> // low-order bit says divide by 100, and so we do. Why?
> // 'cause that's what the algorithm says. Can't fight city
> // hall, especially if it's the city of Redmond
> rvalue /= 100;
> }
> return rvalue;
> }
>
>Sincerely yours,
>
>ROLF-JUERGEN MOLL
>--------------------------------------------
>LucaNet AG
>Hanauer Str. 14b
>80992 M�nchen
>Telefon: +49 (089) 51 999 804
>Telefax: +49 (089) 51 999 796
>
>www.lucanet.de
>--------------------------------------------
>
>
>