PHP json_encode float

PHP json_encode floatPHPjson_encodefloat乐杨俊

大家好,又见面了,我是你们的朋友全栈君。

最近调试一个接口发现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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159278.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 服务器矿机系统,云服务器矿机系统选择_云服务器系统哪个好

    服务器矿机系统,云服务器矿机系统选择_云服务器系统哪个好云服务器矿机内容精选换一换公有云平台支持弹性云服务器在专属主机与公共资源池之间迁移,具体包括:将创建在专属主机上的弹性云服务器迁移至其他专属主机。将创建在专属主机上的弹性云服务器迁移至公共资源池,即不再部署在专属主机上。将公共资源池的弹性云服务器迁移至专属主机上,成为专属主机上创建的弹性云服务器。关机状态的弹性云服务器才能执行迁移操作。云备份或云服务器备份不受冷迁用户可以在管理控制台对专属主机上…

    2022年9月30日
    2
  • 秒懂百科视频下载(秒懂百科全集)

    秒懂百科视频下载相信很多小伙伴都有想要下载秒懂百科的视频,可是bd就是不让下载,怎么办呢,这里有一个小方法提供给大家。。。。1.首先,要下载M3U8_Downloader下载器,地址:https://pan.baidu.com/s/1kVK8FQ32.在百度百科里输入你要下载视频的词条,如图所示:请点击输入图片描述3.按键盘上的f12,打开网页的源码界面,选择network选项后,点击f5刷新后再点击你需要播放的视频,在源码界面找到.m3u8为后缀的文件,如图所示:请点击输入图片描述4.

    2022年4月17日
    197
  • Android 使用动态载入框架DL进行插件化开发

    Android 使用动态载入框架DL进行插件化开发

    2022年1月26日
    37
  • uint16t在那个头文件_uint16

    uint16t在那个头文件_uint16最近看代码里面涉及到unit8_t等数据类型,显然不是C原始数据类型,看名字猜测应该是使用typedef定义的。这样做主要是为了代码维护和移植时比较方便,比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用short,会比较混乱,最好就是用一个typedef来定义,如:typedefcharbool;按照posix标准,一般整形对应的*_t类型为

    2022年9月17日
    5
  • SSH深度历险(四) Maven初步学�

    SSH深度历险(四) Maven初步学�

    2021年11月14日
    45
  • 基于Rust-vmm实现Kubernetes运行时[通俗易懂]

    基于Rust-vmm实现Kubernetes运行时[通俗易懂]随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸、水平攻击、DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行。安全容器技术孕育而生,产生了kata、gVisor、unikernel等多种安全容器方案。本文旨在介绍各种安全容器方案,分析各方案特点,结合腾讯在容器安全领域的实践,帮助读者选择适合自身特性的容器运行时。同时引入Rust-VMM项目,介绍Rust-VMM技术和生态,演示如何使用K8s调度和启用Rust-VMM安全容器运行时,展望以Rust语

    2022年9月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号