php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #43618 missing leading zero in float value
Submitted: 2007-12-17 15:09 UTC Modified: 2007-12-17 23:28 UTC
Votes:9
Avg. Score:4.0 ± 0.8
Reproduced:8 of 8 (100.0%)
Same Version:2 (25.0%)
Same OS:1 (12.5%)
From: marcin dot krzyzanowski at gmail dot com Assigned:
Status: Wont fix Package: OCI8 related
PHP Version: 5.2.5 OS: Windows XP
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: marcin dot krzyzanowski at gmail dot com
New email:
PHP Version: OS:

 

 [2007-12-17 15:09 UTC] marcin dot krzyzanowski at gmail dot com
Description:
------------
There is missing leading zero for float values

Reproduce code:
---------------
$connection = oci_connect("fit","wyoming","blue1.fitdm.pl");
$statement = oci_parse ($connection, "SELECT NUMBER_COLUMN FROM TABLE");
oci_execute ($statement);

while ($row = oci_fetch_array ($statement, OCI_BOTH)) {
    echo $row[0]."</br>";
}


Expected result:
----------------
0,1666

Actual result:
--------------
,1666

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-12-17 18:59 UTC] sixd@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

+--------------------------------------------------------------
|
| This is a consequence of PHP's general preference for strings and the
| default formatting used.  With Oracle, formatting depends on the data
| access tool. For example by default, SQL*Plus also doesn't give
| leading zeros but a COLUMN, SET NUMBER, or SET NUMWIDTH command will
| affect display.  PHP lets you cast, format numbers with sprintf,
| or use TO_CHAR in queries.
|
| SQL> select col1 from bug43618_tab;
|
|       COL1
| ----------
|      .1666
|
| SQL> set numformat 0999.9999
| SQL> select col1 from bug43618_tab;
|
|       COL1
| ----------
|  0000.1666
|
+--------------------------------------------------------------

<?php

/*
Output is:
    Basic query: string(5) ".1666"
    Cast as float: float(0.1666)
    printf as float: 0.166600
    TO_CHAR: string(10) " 0000.1666"

*/

$c = oci_connect("hr", "hrpwd", "ca-tools1/orcl");

$stmtarray = array("drop table bug43618_tab",
    "create table bug43618_tab(col1 number)",
    "insert into bug43618_tab values (0.1666)"
);

foreach ($stmtarray as $stmt) {
    $s = oci_parse($c, $stmt);
    @oci_execute($s);
}

$statement = oci_parse ($c, "select col1 from bug43618_tab");
oci_execute ($statement);
$row = oci_fetch_array ($statement, OCI_NUM);
echo "Basic query: ";
var_dump($row[0]);
echo "Cast as float: ";
var_dump((float)$row[0]);
printf("printf as float: %f\n", $row[0]);

$statement = oci_parse ($c,
                 "select to_char(col1, '0999.9999') from bug43618_tab");
oci_execute ($statement);
$row = oci_fetch_array ($statement, OCI_NUM);
echo "TO_CHAR: ";
var_dump($row[0]);

?>

 [2007-12-17 23:28 UTC] marcin dot krzyzanowski at gmail dot com
well but cast require to have set NLS_NUMERIC_CHARACTERS = '. ' but for my locales: ', ' is adequate and cast to float return "0.0000" instead of any value.

NLS_LANGUAGE=Polish

Is it possible to sync PHP with Oracle Locales automatically and get work all that stuff ?
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 12:01:30 2024 UTC