RFC: Preserve Fractional Part in JSON encode
Cette RFC proposait d’ajouter une option (un flag) supplémentaire à json_encode()
.
Elle partait en effet du constat que json_encode()
encode le flottant 10.0
(côté PHP) vers l’entier 10
(côté JSON). L’opération inverse JSON → PHP donnait donc l’entier 10
(côté PHP) — et, donc, encoder puis décoder une donnée ne menait pas à la même information que celle de départ.
// Actuellement
echo json_encode(10.0); // Affiche 10
echo json_encode(10.1); // Affiche 10.1
var_dump(json_decode(json_encode(10.0))); // Affiche int(10)
var_dump(10.0 === json_decode(json_encode(10.0))); // Affiche bool(false)
Par conséquent, il était proposé d’ajouter un nouveau flag JSON_PRESERVE_FRACTIONAL_PART
qui entraînerait la conservation de cette information.
// Proposé
echo json_encode(10.0); // Affiche 10
echo json_encode(10.1); // Affiche 10.1
echo json_encode(10.0, JSON_PRESERVE_ZERO_FRACTION); // Affiche 10.0
echo json_encode(10.1, JSON_PRESERVE_ZERO_FRACTION); // Affiche 10.1
var_dump(json_decode(json_encode(10.0, JSON_PRESERVE_ZERO_FRACTION))); // Affiche double(10)
var_dump(10.0 === json_decode(json_encode(10.0, JSON_PRESERVE_ZERO_FRACTION))); // Affiche bool(true)
Note
Stocker 10.0
sous la forme 10
ou sous la forme 10.0
en JSON est conforme à la spécification JSON, qui ne différencie pas les différents types de nombres — et certains langages convertissent en 10.0
alors que d’autres, comme PHP aujourd’hui, convertissent vers 10
.
- URL : https://wiki.php.net/rfc/json_preserve_fractional_part
- Version cible : PHP 5.x.x
Les votes ont été ouverts sur cette RFC le 11 janvier 2015 pour être clôturés le 18 janvier 2015 et nous avons exprimé un avis favorable sur internals@
.
Cette proposition a été adoptée par 14 voix contre aucune.