PHP VERSION: 8.2.17
jsond_vs_json_integer_vs_float_encoding.php
<?php
// jsond vs. json extension
$raw1 = (float) 100;
$raw2 = (float) 100.01;
echo "Raw values\n";
var_dump($raw1, $raw2);
$json1 = json_encode($raw1);
$json2 = json_encode($raw2);
echo "Json encoded\n";
var_dump($json1, $json2);
echo PHP_EOL;
echo "Json decoded\n";
var_dump(json_decode($json1), json_decode($json2));
echo PHP_EOL;
// https://wiki.php.net/rfc/json_preserve_fractional_part
// // Currently
echo json_encode(10.0); // Output 10
echo PHP_EOL;
echo json_encode(10.1); // Output 10.1
echo PHP_EOL;
var_dump(json_decode(json_encode(10.0))); // Output int(10)
var_dump(10.0 === json_decode(json_encode(10.0))); // Output bool(false)
echo PHP_EOL;
// Proposed
echo json_encode(10.0); // Output 10
echo PHP_EOL;
echo json_encode(10.1); // Output 10.1
echo PHP_EOL;
echo json_encode(10.0, JSON_PRESERVE_ZERO_FRACTION); // Output 10.0
echo PHP_EOL;
echo json_encode(10.1, JSON_PRESERVE_ZERO_FRACTION); // Output 10.1
echo PHP_EOL;
var_dump(json_decode(json_encode(10.0, JSON_PRESERVE_ZERO_FRACTION))); // Output double(10)
var_dump(10.0 === json_decode(json_encode(10.0, JSON_PRESERVE_ZERO_FRACTION))); // Output bool(true)
echo PHP_EOL;
Output
Raw values
float(100)
float(100.01)
Json encoded
string(3) "100"
string(6) "100.01"
Json decoded
int(100)
float(100.01)
10
10.1
int(10)
bool(false)
10
10.1
10.0
10.1
float(10)
bool(true)
SOURCE CODE