您的位置:首页 > 编程语言 > PHP开发

PHP json_encode float

2017-11-23 18:16 106 查看
最近调试一个接口发现PHP json_encode 会讲超大类型值转成一个float类型

举个简单例子:

问题描述:
1:首先我有个接口且接口参数类型是个string类型
2:比如现在要有个插入一条订单信息记录,但是区分订单类型(由于业务扩展接口参数发生变化)
老参数:12341711131721115295329 //就一个订单号
新参数:
{
"flightOrderId": "12341711131721115295329",
"type": "1" //订单类型
}
注意:其实参数类型都是string (此时老的参数会有问题,问题例子如下)

当参数是只有订单号的时候(老参数):
$data = json_decode($flightOrderId, true); //会将超长的订单值,转换成float(12341711131721115295329 -> 1.23417111317E+22)
if (!is_array($data)) {//说名只有订单号,没有类型type,需要兼容
$data = array(
'flightOrderId' => $data,
'type' => 0
);
}
$flightOrderId = $data['flightOrderId'];   //此时的值已经变成float(1.23417111317E+22)类型了
$orderType = $data['type'];
//do Anything ....

原因分析:(输出当前PHP的版本号 var_dump(PHP_VERSION) )
⚠:发现不同PHP的版本对json_decode处理的返回值还不一样
我用一台PHP版本为:5.4.45 运用行 json_decode($flightOrderId, true) 的时候会改变值转换成 float(1.23417111317E)
我用一台PHP版本为:5.5.9-1运用行 json_decode($flightOrderId, true) 值会是正常12341711131721115295329

解决方法:
$data = json_decode($flightOrderId, true,512,JSON_BIGINT_AS_STRING); //即可兼容
json_decode参数手册:http://php.net/manual/en/function.json-decode.php
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP json_encode floa