JSON_decode JSON_encode 小数位丢失
php7.2 Laravel 5.8
$a = '{"orderAmt":500.00}';
$a_json_decode = json_decode($a,true);
$a_json_encode = json_encode($a_json_decode);
dd($a_json_decode,$a_json_encode);
dd结果
//$a_json_decode
array:1 [
"orderAmt" => 500.0
]
//$a_json_encode
"{"orderAmt":500}"
服务器返回数据是json格式的,需要排序后再转换成字符串,去除双引号后,再验签,但json_decode后小数位就丢失了
关于 LearnKu
先扔结论与建议
代码片段(上下文继承 Laravel 的 Command 类,但其实直接写 php 文件用 cli 运行亦可)
输出
而且,经实践,即使临时配置
serialize_precision为 10,在初始化数组时使用number_format函数格式化小数位数,最后在json_encode时填入选项JSON_PRESERVE_ZERO_FRACTION | JSON_NUMERIC_CHECK也仅能输出500.0。参考资料:
[中文]PHP: json_encode - Manual
[英文]PHP: php.ini 核心配置选项说明 - Manual
[英文]PHP: 预定义常量 - Manual(用于 JSON 编码)