Bug #11953: wrong conversion from data type NUMERIC with decimal places into string
| From: | phpbug at mts dot cz | 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