Subject: | Strange decimal conversion |
Hi,
We are using the Spreadsheet-XLSX-0.13 module for converting an Excel
2007 file into a csv file using the code on the distribution page. The
problem is, occasionally, the conversion translates a decimal excel
cell value to have a value which is nearly the same but not exactly.
For e.g., 0.167 to 0.1670000000001. I say occasionally, as this is very
erratic. This causes data processing routines that match exact values
fail assignments that look for certain specific values. Is there a way
we could fix this?
Here are some general environment details to aid your review -
1. Distribution Name and Version: Spreadsheet-XLSX-0.13
2. Attached perl_V.txt
3. uname -amvr output: AIX laatdm62 3 5 00C396BC4C00
4. Code fragment that is producing the error - attachment CODE_FRG.txt
Please let me know anything else I could provide to assist your review.
Thanks for the help!
Subject: | perl_V.txt |
Summary of my perl5 (revision 5 version 10 subversion 1) configuration:
Platform:
osname=aix, osvers=5.3.0.0, archname=aix
uname='aix laatdm62 3 5 00c396bc4c00 '
config_args='-de -Dcc=cc_r'
hint=recommended, useposix=true, d_sigaction=define
useithreads=undef, usemultiplicity=undef
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=undef, use64bitall=undef, uselongdouble=undef
usemymalloc=n, bincompat5005=undef
Compiler:
cc='cc_r -q32', ccflags ='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=-1 -qnoansialias -DUSE_NATIVE_DLOPEN -q32 -D_LARGE_FILES -qlonglong',
optimize='-O',
cppflags='-D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -qmaxmem=-1 -qnoansialias -DUSE_NATIVE_DLOPEN'
ccversion='', gccversion='', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Linker and Libraries:
ld='ld', ldflags =' -brtl -bdynamic -b32 -bmaxdata:0x80000000'
libpth=/lib /usr/lib /usr/ccs/lib
libs=-lbind -lnsl -ldbm -ldl -lld -lm -lcrypt -lc
perllibs=-lbind -lnsl -ldl -lld -lm -lcrypt -lc
libc=/lib/libc.a, so=a, useshrplib=false, libperl=libperl.a
gnulibc_version=''
Dynamic Linking:
dlsrc=dl_aix.xs, dlext=so, d_dlsymun=undef, ccdlflags=' -bE:/usr/local/lib/perl5/5.10.1/aix/CORE/perl.exp'
cccdlflags=' ', lddlflags=' -bhalt:4 -G -bI:$(PERL_INC)/perl.exp -bE:$(BASEEXT).exp -bnoentry -lc -lm'
Characteristics of this binary (from libperl):
Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
USE_LARGE_FILES USE_PERLIO
Built under aix
Compiled at Feb 26 2011 02:13:00
@INC:
/usr/local/lib/perl5/5.10.1/aix
/usr/local/lib/perl5/5.10.1
/usr/local/lib/perl5/site_perl/5.10.1/aix
/usr/local/lib/perl5/site_perl/5.10.1
.
Subject: | CODE_FRG.txt |
$WkS -> {MaxRow} ||= $WkS -> {MinRow};
foreach $iR ($WkS -> {MinRow} .. $WkS -> {MaxRow})
{
$WkS -> {MaxCol} ||= $WkS -> {MinCol};
foreach $iC ($WkS -> {MinCol} .. $WkS -> {MaxCol})
{
$cell = $WkS -> {Cells} [$iR] [$iC];
if ($cell)
{
print OUT Spreadsheet::XLSX::Utility2007::unescape_HTML($cell -> {Val});
}
if ( ( $iR == ${hdr_seq} - 1 ) )
{
$cfgrec .= Spreadsheet::XLSX::Utility2007::unescape_HTML($cell -> {Val});
}
if ( ( $iC == 0 ) && ( $iR == ${hdr_seq} ) )
{
$cfgrec = uc ( $cfgrec );
$cfgko = cnt_ocr ( $cfgrec, $keyhdr );
$cfgkey = "*," x ( $klm - $cfgko );
}
print OUT "," if ( $iC < $WkS->{MaxCol} );
print OUT $cfgkey if ( ($cfgko == $iC + 1) && ($iR >= $hdrcnt) );
}
print OUT "\n";
}
print LOG tmstmp() . ": Worsheet conversion completed successfully ----- " . $WkS->{Name}, "\n";