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年7月14日 下午9:00
下一篇 2022年7月14日 下午9:00


相关推荐

  • OpenClaw v2026.3.7发布:可插拔上下文是最大亮点

    OpenClaw v2026.3.7发布:可插拔上下文是最大亮点

    2026年3月13日
    4
  • puppet的refresh与refreshonly参数作用

    puppet的refresh与refreshonly参数作用

    2021年8月14日
    81
  • ServerSocket 用法详解

    ServerSocket 用法详解本篇文章观点和例子来自 Java 网络编程精解 作者为孙卫琴 出版社为电子工业出版社 在客户 服务器通信模式中 服务器端需要创建监听端口的 ServerSocket ServerSocket 负责接收客户连接请求 本章首先介绍 ServerSocket 类的各个构造方法 以及成员的用法 接着介绍服务器如何用多线程来处理与多个客户的通信任务 本章提供线程池的一种实现方法 线程

    2026年3月16日
    2
  • 英伟达、英特尔、AMD显卡设置,减少游戏掉帧卡顿「建议收藏」

    英伟达、英特尔、AMD显卡设置,减少游戏掉帧卡顿「建议收藏」英伟达显卡设置首先要更新英伟达显卡驱动。1、右键桌面,选择【NVIDIA控制面板】,在打开的面板中,选择左侧的【管理3D设置】。2、在管理3D设置中,更改以下选项(部分显卡可能会没有以下部分选项,可以不设置相应选项):首选图形处理器更改为英伟达显卡 OpenGL渲染GPU更改为英伟达显卡 三重缓冲更改为【开】 低延迟模式更改为【超高】 电源管理模式更改为【最高性能优先】 …

    2022年5月20日
    182
  • git部署到服务器上_git部署代码到服务器

    git部署到服务器上_git部署代码到服务器搭建Git服务器并感受hook使用通常情况下我们都是将项目托管到Github,Coding等服务商。如果你有一台自己的Linux云主机,在上面搭建Git服务器比想象中要简单的多。这篇文章讲解如何搭建Git服务器及使用git的hook机制(使用post-receive这个hook,在git服务器受到push请求,并且接受完代码提交时…文章飞凡的陀螺2018-04-22819浏览量Git远程仓库…

    2022年10月4日
    5
  • Vscode格式化 代码

    Vscode格式化 代码Vscode 编译器有很多格式化插件 比如 Vetur 和 Eslint 但是 Vetur 和 Eslint 倾向于格式化前端代码格式化 c 语言代码 不需要插件 使用自带的 clang format 就可以在 File gt Preferance gt setting 中 使用 Clang format style 配置风格

    2026年3月19日
    3

发表回复

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

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