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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • window.navigator.userAgent用来区分设备和浏览器

    window.navigator.userAgent用来区分设备和浏览器javascript的navigator对象navigator为Window对象的一个属性,指向了一个包含浏览器相关信息的对象。navigatot中包含了一些常用到的属性,如navigator.appVersion浏览器的版本号navigator.appName浏览器的名称navigator.language浏览器使用的语言navigator.platform…

    2022年9月11日
    0
  • awvs使用方法_一般人游50米要多久

    awvs使用方法_一般人游50米要多久Awvs的是一款非常好用的web漏洞扫描工具,他的扫描速度比较快,可以自己选择扫描速度,比较灵活。Awvs分为老的版本和新版本,下面我介绍的是新版本的功能和用法。功能介绍如下:仪表盘(监视器)功能,添加目标功能,漏洞排序功能,扫描功能,发现功能,用户功能,扫描配置功能,网络扫描功能,追踪器功能,防火墙设置,邮件设置,引擎,时间排除功能,代理功能,常规设置主要使用的功能是前面的6个,后面的根据个人的需要进行配置详细介绍如下:Dashboard功能:翻译意思仪表盘(监视器),可以对扫描对扫描

    2022年9月22日
    0
  • 阿里云URL转发类问题排查[通俗易懂]

    阿里云URL转发类问题排查[通俗易懂]概念URL转发包含URL隐性转发和URL显性转发,主要是指将一个域名指向另外一个已经存在的站点时,可以通过URL转发实现。隐性URL转发是用的是iframe框架技术,显性URL转发采用的是301(也称之为永久性转移)或302重定向技术(也称之为暂时性转移)。301和302说明301redirect:301代表永久性转移(PermanentlyMoved)302redirect:302代表暂时性转移(TemporarilyMoved)共同点:301和302状态码都表示重定向,当浏览

    2022年10月19日
    2
  • VMware下载安装教程(vbox虚拟机安装教程)

    全网最详细的VMware虚拟机下载安装教程第一步下载虚拟机1.进入VMware官网,点击左侧导航栏中的下载,选择下拉列表中的产品下载,再点击图中标记的WorkstationPro,如下图所示。2.选择自己需要的版本和操作系统,在这里以Windows系统为例,点击转至下载,如下图所示。-3.点击转至下载后也在此处可以选择版本。选择好版本后点击立即下载。如下图所示。4.注意,需要登录之后才能下载。若无账号可点击注册后登录。如下图所示。二、安装虚拟机1.进入下载路径,双击.

    2022年4月10日
    88
  • IDEA使用模板自动生成类注释和方法,解决方法注释在接口中或普通类的方法外使用模板注释不带参数的情况

    IDEA使用模板自动生成类注释和方法,解决方法注释在接口中或普通类的方法外使用模板注释不带参数的情况IDEA自动生成类注释和方法注释类注释方法注释类注释按照下方路径打开设置File->Settings->Editor->FileandCodeTemplates->Includes->FileHeaderFileHeader代码/***@author${USER}*@dateCreatedin${DATE}${TIME}*@modifiedBy${USER}in${DATE}${TIME

    2022年8月30日
    3
  • 004-protostuff踩坑-java bean新增字段反序列化失败问题

    004-protostuff踩坑-java bean新增字段反序列化失败问题protostuff避免更改java对象字段,比如新增一个,导致redis等缓存的数据反序列化失败问题??问题重现:我们有个方法通过attrKey查询List,同时方法中有缓存,会优先查询缓存,没有读库,然后写缓存返回。方法伪代码如下:publicvoidsetId(StringattrKey){//从缓存查询List<ConfAttr>attrValues=cacheClient.get(attrKey);

    2022年5月7日
    169

发表回复

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

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