From: [EMAIL PROTECTED] Operating system: Linux PHP version: 4.0.5 PHP Bug Type: InterBase related Bug description: wrong conversion from data type NUMERIC with decimal places into string 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 bug report at: http://bugs.php.net/?id=11953&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]