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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux的grep命令详解_grep -v命令

    linux的grep命令详解_grep -v命令文章目录一、grep常用命令1、语法2、范例二、grep的一些高级参数1、语法2、范例三、基础正则表达式练习1、与中括号`[]`结合2、与反向选择^结合使用3、与行首`^`和行尾$字符结合4、任意一个字符`.`与重复字符`*`5、`{}`限定连续字符范围一、grep常用命令grep的功能是分析一行信息,若其中有我们所需要的信息,就将其拿出来。需要注意的是它以整行为单位…

  • URI和URL的区别比较与理解[通俗易懂]

    URI和URL的区别比较与理解[通俗易懂]一、URI<1>什么是URIURI,通一资源标志符(UniformResourceIdentifier,URI),表示的是web上每一种可用的资源,如HTML文档、图像、视频片段、程序等都由一个URI进行定位的。<2>URI的结构组成URI通常由三部分组成:①访问资源的命名机制;②存放资源的主机名;③资源自身的名称。<3>…

  • 云服务器怎么设置成代理服务器?

    云服务器怎么设置成代理服务器?我的云服务器本来是作为Web服务器用的。但是现在有个问题我们财务的软件,数据在联通的服务器上存放着,而我们单位的网络是移动的网络,两个连起来费劲的很,也就是软件使用起来费劲的很。我想通过云服务器中转,因为我们上云服务器速度挺快,云服务器上联通的应该也挺快的。高手知道怎么搞嘛?就像网上很多http、socks代理一样,把我的服务器变…

  • 贴片电阻的认识_什么是贴片电阻

    贴片电阻的认识_什么是贴片电阻 贴片电阻特性:体积小,重量轻;适应再流焊与波峰焊;电性能稳定,可靠性高;装配成本低,并与自动装贴设备匹配;机械强度高、高频特性优越。RC产品代号片状电阻器05型号020402030603050805061206

  • wxpython中文教程_wxPython中文教程 简单入门加实例

    wxpython中文教程_wxPython中文教程 简单入门加实例原博文2015-04-2906:56−wx.Window是一个基类,许多构件从它继承。包括wx.Frame构件。技术上这意味着,我们可以在所有的子类中使用wx.Window的方法。我们这里介绍它的几种方法:*SetTitle(stringtitle)——设置窗口标题。只可用…相关推荐2008-11-2312:00−一、简介wxPython是Pytho…

  • Python分布式爬虫原理[通俗易懂]

    转载请注明出处:http://blog.csdn.net/yiliumu/article/details/21335245首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的。(1)打开浏览器,输入URL,打开源网页(2)选取我们想要的内容,包括标题,作者,摘要,正文等信息(3)存储到硬盘中上面的三个过程,映射到技术层面上,其实就是:网络请求,抓取结构化数据,数据存

发表回复

您的电子邮箱地址不会被公开。

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