Edit report at https://bugs.php.net/bug.php?id=63684&edit=1

 ID:                 63684
 Updated by:         ahar...@php.net
 Reported by:        roastduck at qq dot com
 Summary:            pdo sqlite round function can't work correct
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            PDO related
 Operating System:   windows xp
 PHP Version:        5.3.19
 Block user comment: N
 Private report:     N

 New Comment:

Floating point values have a limited precision. Hence a value might 
not have the same string representation after any processing. That also
includes writing a floating point value in your script and directly 
printing it without any mathematical operations.

If you would like to know more about "floats" and what IEEE
754 is, read this:
http://www.floating-point-gui.de/

Thank you for your interest in PHP.




Previous Comments:
------------------------------------------------------------------------
[2012-12-04 08:40:02] roastduck at qq dot com

Description:
------------
when I used pdo for the sql "select round(863521.777777778, 2) as a", it gets 
wrong result 863521.780000001

Test script:
---------------
<?php
$db = new PDO("sqlite:../test.s3db");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$st = $db->query('select round(863521.777777778, 2) as a');
$data = $st->fetchAll();
print_r($data);

$st = $db->query('select round(372366.577777778, 2) as a');
$data = $st->fetchAll();
print_r($data);


Expected result:
----------------
Array
(
    [0] => Array
        (
            [a] => 863521.780000001
            [0] => 863521.780000001
        )

)
Array
(
    [0] => Array
        (
            [a] => 372366.58
            [0] => 372366.58
        )

)



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=63684&edit=1

Reply via email to