|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2002-05-25 09:22 UTC] derick@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 06:00:01 2025 UTC |
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