Skip to content

SQL_FLOAT handler casts from float to internal double which causes precision issues. #107

@mlazdans

Description

@mlazdans

Code in question:

php-firebird/ibase_query.c

Lines 1320 to 1322 in 23aca98

case SQL_FLOAT:
ZVAL_DOUBLE(val, *(float *) data);
break;

Test case:

CREATE TABLE FLOAT_TEST (
    FLOAT_FIELD FLOAT DEFAULT 3.14
);
ibase_query("INSERT INTO FLOAT_TEST (FLOAT_FIELD) VALUES (1.23)") or die ("ibase_query failed");
$q = ibase_query("SELECT * FROM FLOAT_TEST") or die ("ibase_query failed");
$r = ibase_fetch_object($q) or die ("ibase_fetch_object failed");
var_dump($r);
object(stdClass)#1 (1) {
  ["FLOAT_FIELD"]=>
  float(1.2300000190734863)
}

Should be: 1.23

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions