Bug #15151 Updated: Decimals/Numerics stored as int64 always display as xxx.2

From: Date: Mon, 21 Jan 2002 18:15:30 +0000
Subject: Bug #15151 Updated: Decimals/Numerics stored as int64 always display as xxx.2
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-77709@lists.php.net to get a copy of this message
ID: 15151
User updated by: mitch@tropical.co.cr
Reported By: mitch@tropical.co.cr
Status: Open
Bug Type: InterBase related
Operating System: Windows
PHP Version: 4.1.1
New Comment:

This is also reported as #13807


Previous Comments:
------------------------------------------------------------------------

[2002-01-21 13:10:17] mitch@tropical.co.cr

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 this bug report at http://bugs.php.net/?id=15151&edit=1



Thread (2 messages)

« previous php.dev (#77709) next »