Thank you for you're concern. Let me do more research on this and post a reply if i get a solution.
Using sprintf or %.4f will not work here, as the value from ReadData (which is part of Spreadsheet::Read) subroutine is it self coming as rounded, so even i used .4f on .99 it would be the same. As of now, as a work around I have given a vb tool to convert the xlsx files to xls, since this issue is not coming in xls files. May be I should continue by comparing the parsers of XLS and XLSX and see the difference.
Thanks to kcott, Tux, afoken and sundialsvc4 for your help :)