当前位置: 首页 > news >正文

西双网站建设太原网站建设培训班

西双网站建设,太原网站建设培训班,差旅网站建设,海口网站建设哪家专业一、问题缘由 PHP 服务接收前端传过来的单价(字符串形式)和数量,把单价转成分(单价*100),然后传给下游的 Golang 服务,不过最后从两个服务日志中发现金额相差 1。 以下为前端传的 {"amount": 4,"price": "9.2&qu…

一、问题缘由

PHP 服务接收前端传过来的单价(字符串形式)和数量,把单价转成分(单价*100),然后传给下游的 Golang 服务,不过最后从两个服务日志中发现金额相差 1。

以下为前端传的

{"amount": 4,"price": "9.2"
}

PHP 转换的

{"amount": 4,"price": 920
}

下游服务接收到的

{"amount": 4,"price": 919
}

问题跟踪

查看了下,PHP 处理的代码

$price = $req['price'] * 100;

乍一看,木得毛病。但是使用 var_dump 打印,就能看出问题来

$price = $req['price'] * 100;
var_dump($price); // float(920)

看到没,是 float 类型,看了下 Golang 对应的结构体为

type req struct {price int64amount int64
}

也就是在使用传递过程中,会把 float 转成 int。由于浮点数在计算机中表示方式的精度问题,$price 实际上可能是一个非常接近 920 的值(如 919.99999999999),但不是精确的 920,导致转成 int 截断时结果为 919。

问题解决

既然 float 转 int 会截断,那么可以先转成 string 再转成 int 就可以了

$price = intval(strval($req['price'] * 100));

当然了,也可以用 PHP 的 bcmath 高精度扩展来解决。

$price = bcmul($price, 100, 0);
$price  =  intval($price);
http://www.yayakq.cn/news/591188/

相关文章:

  • 资阳网站建设thinkphp做的网站怎么预览
  • 东莞网站建设怎么样网站建设比较好的律所
  • 自学网站建设哪个网站好php网站开发面向对象教程
  • 门户网站建设工作领导小组规划网站的总结
  • 天津建设网站需要的费用原创文学网站建设
  • 网站建设需要保存什么wordpress分类图片
  • 北京网站建设招标网站主办者单位有效证件电子件是什么
  • 做网站注册页面中英文对照网站怎么做
  • 视频购物网站开发方案ui设计工资怎么样
  • 打开上次浏览的网站无法访问此网站是什么原因
  • 上海做saas平台网站的公司企业网络推广的简介
  • 张家港建设局官方网站wordpress 首页分栏
  • 网站规划怎么做建立网站后怎样收费
  • 用html5做京东网站代码百度云盘资源搜索
  • 专业网站制作公司地址射洪网站建设工作室
  • 织梦cms做多语言的网站sz住房和城乡建设部网站
  • 网站如何三合一优化设计七年级下册语文答案
  • 百度收录网站但首页快照不更新在线做c 题的网站
  • 网站界面设计需要做设计一般用的素材网站是什么意思
  • 湖南免费网站建设外贸行业要死光了2022
  • 东莞品牌型网站建设公众号营销
  • 网站建设的中期检查表广东网络制作
  • 网站开发界面设计用什么工具手机搭建电脑做的网站
  • 南阳网站建设优化海外推广什么意思
  • 深圳专业网站建设公司html手机网站开发教程
  • 什么是静态页面网站整合营销的最高阶段是
  • 忻州网站建设费用怎样提升网站关键词
  • 汕头网站wordpress评价插件
  • 宝安附近做网站公司seo快速排名首页
  • 泸县做网站公司wordpress 定时发布插件