ID:               11953
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Closed
 Bug Type:         InterBase related
 Operating System: Linux
 PHP Version:      4.0.5
 New Comment:

Thank you for your bug report. This issue has already been fixed
in the latest released version of PHP, which you can download at 
http://www.php.net/downloads.php




Previous Comments:
------------------------------------------------------------------------

[2001-07-07 22:23:21] [EMAIL PROTECTED]

When the database column has type NUMERIC(10,3) and you stored value
12.01, when you would like to retrieve it you get 10.1. Following patch
fixes this bug.

Regards, Libor Chocholaty

--- php-4.0.5-orig/ext/interbase/interbase.c    Mon Feb 26 07:07:00
2001
+++ php-4.0.5/ext/interbase/interbase.c Sun Jul  8 04:02:11 2001
@@ -25,6 +25,10 @@
 
 /*
        Changes:
+               2001-07-08:     Libor Chocholaty
<[EMAIL PROTECTED]>
+                       - fixed problem with conversion from numeric
+                         with decimal places internally stored as
+                         ISC_INT64 to string.
                1999-09-21:     Ivo Panacek <[EMAIL PROTECTED]>
                        - added COMPILE_DL section
                        - more verbose php_info_ibase function
@@ -1778,11 +1782,24 @@
                        break;
 #ifdef SQL_INT64
                case SQL_INT64:
-                       val->type = IS_STRING;
-                       val->value.str.len = sprintf(string_data,
"%Ld.%Ld",
-                                                                      
         (ISC_INT64) (*((ISC_INT64 *)data) / (int) pow(-               
                                                               
(ISC_INT64) abs((int) (*((ISC_INT64 *)data) %
-                       val->value.str.val = estrdup(string_data);
+                       {
+                               char aux_str[40], *fract;
+                               long long aux_long = (ISC_INT64)
abs((int) (*((ISC_INT64 *)data) % (int) pow(10.0, (double) -sc+        
                      sprintf(aux_str, "0000000000000000000%Ld",
aux_long);
+                               fract = aux_str + strlen(aux_str) +
scale;
+
+
+                               val->type = IS_STRING;
+
+                               sprintf(string_data, "%Ld", (ISC_INT64)
(*((ISC_INT64 *)data) / (int) pow(10.0, (double) -scale+               
               if (aux_long)
+                               {
+                                       strcat(string_data, ".");
+                                       strcat(string_data, fract);
+                               }
+                               val->value.str.len =
strlen(string_data);
+                               val->value.str.val =
estrdup(string_data);
+                       }
                        break;
 #endif
 #ifndef SQL_TIMESTAMP                                                 
                                                       

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=11953&edit=1

Reply via email to