element-api
element-api copied to clipboard
Output of Float Numbers - Rounding Not Enforced
Description
I am using element-api to output JSON from Craft number fields (which are themselves limited to 1 or 2 decimal places) but for some reason, on output these are extended to 15 decimal places regardless of any PHP rounding rules I use in my controller classes.
Steps to reproduce
- Output number field in an API endpoint.
- View that output in the browser.
Additional info
- Craft version:
Craft Pro 4.5.6.1 - PHP version:
8.0.28 - Database driver & version:
MariaDB 10.4.28 - Plugins & versions:
Code:
return [
'imperial' => [
'value' => round($imperial, 2),
'units' => $units->unit_label->imperial,
],
'metric' => [
'value' => round($metric, 2),
'units' => $units->unit_label->metric,
]
];
Output:
"imperial": {
"value": 10.800000000000001,
"units": "in"
},
"metric": {
"value": 273,
"units": "mm"
}
I should add, the output is the same with or without the round() function.
I found a server configuration that solved this for me after I discovered the issue did not exist when deployed to our staging server.
I am running this locally via DDEV. Adding a php.ini file to /craft/.ddev/php/php.ini with the following contents resolved the float precision issue for me:
[PHP]
serialize_precision = -1