From: Derick Rethans Date: Wed, 6 Mar 2002 19:54:47 +0000 (+0000) Subject: - Fix for bug #12383 and #14755: 105.05$ becomes 105.5$ (Patch by: Giancarlo X-Git-Tag: php-4.2.0RC1~83 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d716e02a988b2fa22959aeb4967b3642b3454745;p=php - Fix for bug #12383 and #14755: 105.05$ becomes 105.5$ (Patch by: Giancarlo Niccolai ) --- 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