当前位置:网站首页>php运算时精度丢失解决方法
php运算时精度丢失解决方法
2022-08-05 12:05:00 【我王十一呀】
/** * 这里我用这种方法是发现内置方法在foreach里有问题,所以用了这种方法 * 思路就是将两个数乘以最大的那个小数位再根据运算符去除 * @param $one * @param $two * @param $type * @return float|int|string */
public function precision_restore($one,$two,$type){
$one = (double)$one;
$two = (double)$two;
$one_dec = $this->sum_length($one);
$two_dec = $this->sum_length($two);
$sum = '';
if($one_dec>$two_dec){
$dec = $one_dec;
}else{
$dec = $two_dec;
}
$ten = pow(10,$dec);
switch ($type) {
case '加法':
$sum = ($one*$ten + $two*$ten) / $ten;
break;
case '减法':
$sum = ($one*$ten - $two*$ten) / $ten;
break;
case '乘法':
$sum = (($one*$ten) * ($two*$ten)) / pow($ten,2);
break;
case '除法':
$sum = ($one*$ten) / ($two*$ten);
break;
default:
dd('参数错误');
}
return (string)$sum;
}
public function sum_length($num) {
$count = 0;
$temp = explode('.',$num);
if (sizeof($temp) > 1) {
$decimal = end($temp);
$count = strlen($decimal);
}
return $count;
}
调用的时候直接 $sum = $this->precision_restore(‘数字一’,'数字二','加法');
-------------------------------------------------php内置函数----------------------------------
bcadd — 2个任意精度数字的加法计算
bccomp — 比较两个任意精度的数字
bcdiv — 2个任意精度的数字除法计算
bcmod — 对一个任意精度数字取模
bcmul — 2个任意精度数字乘法计算
bcpow — 任意精度数字的乘方
bcpowmod — 将任意精度的数字提高到另一个,减少指定的模数
bcscale — 设置所有bc数学函数的默认小数点保留位数
bcsqrt — 任意精度数字的二次方根
bcsub — 2个任意精度数字的减法
边栏推荐
- Digital-intelligent supply chain system in the household appliance industry: efficiently integrate the supply chain and enhance the core competitiveness of household appliance enterprises
- Two: OpenCV image overlay logical operation
- 【Untitled】
- Regular expressions in action
- Wingide 快捷键
- [Supply Chain·Case] What did the top ten retailers in the world do under the influence of the epidemic?
- Learning Deep Compact Image Representations for Visual Tracking
- 795. 前缀和
- 安装tldr
- treeselect常用功能记录(有清除选项的回调函数)
猜你喜欢

STM32H743IIT6学习笔记01——CubeMX新建工程文件

C语言例题-打印日历

详细剖析 Redis 三种集群策略

KVM virtualization technology-NUMA technology and application

Huawei Analysis & Intermodal Activities to Help You Improve Overall Game Payments

2022年6月互联网医疗领域月度观察

Memory problems difficult to locate, it is because you do not use ASAN

小家电行业供应链协同管理系统:助力企业突围市场竞争,加强供应链快速响应能力

关注微信公众号,自动登陆网站

家用电器行业数智化供应链系统:高效整合供应链,提升家电企业核心竞争力
随机推荐
60行从零开始自己动手写FutureTask是什么体验?
The memory problem is difficult to locate, that's because you don't use ASAN
Version Control | Longzhi invites you to go to the GOPS Global Operation and Maintenance Conference to explore the road of large-scale, agile, high-quality and open software development and operation
795. 前缀和
不是吧?还有人不会定位线上MySQL慢查询问题?
InnoDB storage structure of MySQL
食品饮料行业B2B商城系统:加速行业数字化转型,提升B2B平台交易效率
Quick Check of OGC WebGIS Common Service Standards (WMS/WMTS/TMS/WFS)
Wingide 快捷键
796. 子矩阵的和
Cesium.js 三维土壤地质剖面分割挖掘
Mysql8基础知识
Two: OpenCV image overlay logical operation
2022.08.04_每日一题
花的含义
银行交易系统怎么保证数据交易强一致性?通过数据库组件?怎么保证高并发下数据库交易数据正常一致性?
stm32项目之SPI通信2.4G模块(NF2401L)
关注微信公众号,自动登陆网站
小家电行业供应链协同管理系统:助力企业突围市场竞争,加强供应链快速响应能力
【HMS core】【FAQ】Health Kit, Ads kit, Push Kit Typical Questions Collection 5