From: [EMAIL PROTECTED]
Operating system: Windows
PHP version: 4.1.1
PHP Bug Type: InterBase related
Bug description: Decimals/Numerics stored as int64 always display as xxx.2
Decimals/Numerics that are stored as 64-bit integers always display as
xxx.2.
The following should fix the problem:
Original code (on or about line 1782):
val->value.str.len = 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))));
Change to:
val->value.str.len = sprintf(string_data, "%Ld",
(ISC_INT64) (*((ISC_INT64 *)data) /
(int) pow(10.0, (double) -scale)));
val->value.str.len += sprintf(string_data +
val->value.str.len, ".%0*Ld",
-scale,
(ISC_INT64) abs((int) (*((ISC_INT64 *)data) %
(int) pow(10.0, (double) -scale))));
The problem is with MSVC++. It doesn't seem to like two int64s in the
same sprintf statement. I don't yet have all the pieces to compile the
extension so I have not fully tested it, but I have duplicated the problem
in a test program and verified that the above code fixes the problem in
the test program.
--
Edit bug report at: http://bugs.php.net/?id=15151&edit=1
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]