summaryrefslogtreecommitdiff
path: root/ext/interbase
diff options
context:
space:
mode:
authorDerick Rethans <derick@php.net>2002-03-06 19:54:47 +0000
committerDerick Rethans <derick@php.net>2002-03-06 19:54:47 +0000
commitd716e02a988b2fa22959aeb4967b3642b3454745 (patch)
tree778ae76ccf75252de590df8b98cc3e7cd5d2125a /ext/interbase
parent01505de0b1e9b3c1d1d9bb131272897c9a773043 (diff)
downloadphp-git-d716e02a988b2fa22959aeb4967b3642b3454745.tar.gz
- Fix for bug #12383 and #14755: 105.05$ becomes 105.5$ (Patch by: Giancarlo
Niccolai <giancarlo@niccolai.org>)
Diffstat (limited to 'ext/interbase')
-rw-r--r--ext/interbase/interbase.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/ext/interbase/interbase.c b/ext/interbase/interbase.c
index eb2795aebf..d355c41d69 100644
--- a/ext/interbase/interbase.c
+++ b/ext/interbase/interbase.c
@@ -1783,11 +1783,22 @@ static int _php_ibase_var_pval(pval *val, void *data, int type, int len, int sca
break;
#ifdef SQL_INT64
case SQL_INT64:
- Z_TYPE_P(val) = IS_STRING;
- Z_STRLEN_P(val) = sprintf(string_data, "%Ld.%0*Ld",
- (ISC_INT64) (*((ISC_INT64 *)data) / (int) pow(10.0, (double) -scale)), -scale,
- (ISC_INT64) abs((int) (*((ISC_INT64 *)data) % (int) pow(10.0, (double) -scale))));
- Z_STRVAL_P(val) = estrdup(string_data);
+ val->type = IS_STRING;
+
+ if (scale) {
+ int i, len;
+ char dt[20];
+ double number = (double) ((ISC_INT64) (*((ISC_INT64 *)data)));
+
+ number /= - 10 * scale;
+ sprintf(dt, "%%0.%df", -scale);
+ val->value.str.len = sprintf (string_data, dt, number);
+ } else {
+ val->value.str.len = sprintf (string_data, "%Ld",
+ (ISC_INT64) (*((ISC_INT64 *)data)));
+ }
+
+ val->value.str.val = estrdup(string_data);
break;
#endif
#ifndef SQL_TIMESTAMP