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
>--------------------------------------------
>
>
>



Reply via email to