diff options
| author | Derick Rethans <derick@php.net> | 2002-03-06 19:54:47 +0000 |
|---|---|---|
| committer | Derick Rethans <derick@php.net> | 2002-03-06 19:54:47 +0000 |
| commit | d716e02a988b2fa22959aeb4967b3642b3454745 (patch) | |
| tree | 778ae76ccf75252de590df8b98cc3e7cd5d2125a /ext/interbase | |
| parent | 01505de0b1e9b3c1d1d9bb131272897c9a773043 (diff) | |
| download | php-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.c | 21 |
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 |
