Adam,

> I asked this question about4 months ago and I never got a response. 
> So, I will ask again.
> 
> 
> Using DBD::XBase, when I create tables with floating point columns,
> the table has the numbers with the the decimals truncated.  I have
> created the file using the following command
> 
>  $db_out->do('CREATE TABLE SHEPC.dbf (SHBUSU CHAR(8), SHFAC CHAR(3),
>  SHDMG
> float, SHFCS float, SHSLA float, SHPDS float)') or die "Cannot create
> table: $DBI::errstr\n";
> 
> 
> I have tried variations of the float command with attempts to set the
> precision.  All attempts leave me with a table that WILL NOT carry the
> decimals.  Is there something simple I am doing wrong, or something I
> don't read in the DBD::XBase documentation?
> 
> Adam


I reproduced your problem and found that it is a documentation issue. 
DBD::XBAse is basically a wrapper around XBase.pm. Following the 
XBase.pm pod, you can manually set the field width and the decimal 
precision for float fields, and it says that it will assume 
reasonable defaults if none are specified. Reading through the code 
of XBase.pm I found that it sets the the field width to 8 (line 674)  
and the decimal precision to *zero* (line 680) for float fields by 
default (It may be doubted if zero decimal precision is reasonable 
for float fields). Reading through the code of XBase::SQL, which 
transforms the SQL statements for XBase.pm, lines 67-69 say that we 
can specify the field width and precision of float fields in our SQL 
statement as well. So,

my $sql = "CREATE TABLE $table ( float_field float(15, 8))";

will create a float field holding 15 digits, 8 of which are right of 
the decimal separator. Notice that decimal precision and field width 
must be manually be checked to fit with your number, as there seem to 
be no warnings if things don't fit (e.g., a field width lesser than 
the decimal precision etc). The above has worked for me.

HTH

Bodo




Reply via email to