Bug #11953: wrong conversion from data type NUMERIC with decimal places into string

From: Date: Sun, 08 Jul 2001 02:23:22 +0000
Subject: Bug #11953: wrong conversion from data type NUMERIC with decimal places into string
Groups: php.dev 
Request: Send a blank email to php-dev+get-59191@lists.php.net to get a copy of this message
From: phpbug@mts.cz 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 <chocholaty@obolus.cz> + - fixed problem with conversion from numeric + with decimal places internally stored as + ISC_INT64 to string. 1999-09-21: Ivo Panacek <ivop@regionet.cz> - 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

« previous php.dev (#59191) next »