Like:
float(1.2345678901235E+19) => string(20) \"12345678901234567890\"
Can it be done?
(it\'s for json_decode...)
I solved this issue by passing the argument JSON_BIGINT_AS_STRING
for the options
parameter.
json_decode($json, false, 512, JSON_BIGINT_AS_STRING)
See example #5 in the json_decode documentation
A double precision floating point number can only contain around 15 significant digits. The best you could do is pad the extra digits out with zeroes.
$float = 0.123;
$string = sprintf("%.3f", $float); // $string = "0.123";
It turns out json_decode by default casts large integers as floats. This option can be overwritten in the function call:
$json_array = json_decode($json_string, , , 1);
I'm basing this only on the main documentation, so please test and let me know if it works.
echo number_format($float,0,'.','');
note: this is for integers, increase 0 for extra fractional digits
The only way to decode a float without losing precision is to go through the json and frame all the floats in quotation marks. By making strings of numbers.
PHP json_decode integers and floats to string