知识分类
后端
前端
设计
开源组件/产品
APP
其他
广告招募

PHP 中并不是把MYSQL字段设置成decimal就万无一失

管理员
发布于:2023-07-24 22:29:00

MYSQL的decimal是一种精准数据类型,一般用于存放货币类型。但是如果你再PHP中没有进行正确的处理,还是会出现精度问题,出错示例如下:

echo floor((0.1 + 0.7) * 10);

上面的代码返回的是“7”,和想象中不一样,如果把这个数据存到MYSQL,即使字段设置的是decimal,最后实际上也是会出现误差,为什么会出现这个问题,这里不详细解释,大家可以自行百度。

下面重点解释如何解决这个误差问题:

方案一:

安装PHP的decimal扩展,需要PHP版本 >7.2

安装方法和手册请查看:

http://php-decimal.io/#basic-usage

简单使用方法:

use Decimal\Decimal;

$a = new Decimal("1", 2);
$b = new Decimal("7", 8);

print_r($a / $b);

方案二:

使用PHP内置函数:

  bcadd — 将两个高精度数字相加

  bccomp — 比较两个高精度数字,返回-1, 0, 1

  bcdiv — 将两个高精度数字相除

  bcmod — 求高精度数字余数

  bcmul — 将两个高精度数字相乘

  bcpow — 求高精度数字乘方

  bcpowmod — 求高精度数字乘方求模,数论里非常常用

  bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”

  bcsqrt — 求高精度数字平方根

  bcsub — 将两个高精度数字相减

简单使用方法:

floor(bcadd($a, $b, 2) * 10) //可以看出成功返回想要的数字8

使用那种方法,看自己的是实际情况来决定。

上一篇:php常用实用函数(不定期更新)
下一篇:php json_encode有双引号,前端JS解码报错的解决方法
搜索内容
最新文章
  • 非可框架,懒人接口生成器应用发布,让
  • 爬虫监控就像给网站装心跳监测仪,非可
  • 非可框架,Google Authen
  • 连接WIFI出现无Internet
  • 免费AI SEO工具,SEO的AI生
  • OBS在银河麒麟或ubuntu等核心
  • 常见主板开机进入bios热键,一张图
  • 微软常用运行库VC++合集下载,解决
  • MSYS2中安装使用GCC的正确方法
  • 用了这些网站,多出来的时间让你摸鱼
精彩文章
  • 1 MSYS2中安装使用GCC的正确方法
  • 2 JavaScript 判断对象是否为
  • 3 什么是PHP站群以及使用php开源框
  • 4 连接WIFI出现无Internet
  • 5 Layui 怎么样更换主题颜色?
  • 6 常见主板开机进入bios热键,一张图
  • 7 FrameCoder非可,基于web
  • 8 小程序真机调试 报错 define
  • 9 vscode用一个插件快速生成Vue
  • 10 免费AI SEO工具,SEO的AI生
工信部备案:苏ICP备2023011827号-1
苏公网安备 32111202000338号