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

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions