php 浮点数相加精度问题及解决办法

PHP实现高精度加法(附完整源码) 阅读详情
var_dump(0.1+0.2 == 0.3);  
// bool(false)

var_dump(0.1+0.7 == 0.8);  
// bool(false)

var_dump(0.01+0.2 == 0.21);  
// bool(false)
...
$money = $data['money']; //  $money 为前端传的总金额,为 0.21
$applyList = [
    ['money' => 0.2],
    ['money' => 0.01]
];
$sums = 0;
foreach($applyList as $key => $value) {
    $sums += $value['fee'];
}
var_dump($sums == $money); //发现是false

解决办法:bcadd()

bcadd() 2个任意精度数字的加法计算

var_dump(bcadd($sums,0,2) == $money);
简单谈谈php浮点数精确运算 bc是Binary Calculator的缩写。bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale没有提供,就用bcscale的缺省值。这里大数直接用一个由0-9组成的string表示,计算结果返回的也是一个 string。 bcadd — 将两个高精度数字相加 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字余数 bcmul — 将 立即下载

相关推荐

告别Overleaf!本地LaTeX环境配置:VSCode+TeXLive完全指南(Windows/Mac双平台)

本文详细介绍了如何在Windows和Mac平台上配置本地LaTeX环境,使用VSCode和TeXLive打造高效的专业写作工作流。从TeXLive安装到VSCode插件配置,再到高级技巧与性能优化,帮助用户摆脱Overleaf限制,实现更快速、更私密的学术写作体验。

3c4x5z6v7b的博客 952

问题小记:php 加减法计算结果丢失精度

今天收到反馈,我这边提交的退款请求有丢失精度的参数,同事提醒才知道加减法也会导致计算结果丢失精度,以后加减法也要放到函数里进行计算保留两位小数,不要直接使用计算符合 bcadd($totalAmount, $scalePrice,2);//任意精度的加法,保留两位小数 bcsub($totalAmount, $scalePrice,2);//任意精度的减法,保留两位小数 ...

qq_42125025的博客 1135

endnote让参考文献整整齐齐

这篇文章主要是针对利用 endnote 插入参考文献时,参考文献第一行和后面的行对不齐的问题 下面是示意图 可以看到我们的参考文献对的整整齐齐的,比较好看。 下面介绍具体步骤 1、打开endnote。编辑我们使用的参考文献样式。我这儿是叫 ZZ_MODIFIED_GEEBINF 复制 2、找到布局,每个参考开头,将光标放在在参考开头后面,点插入字段,制表符 3、右下角悬挂式输出哪儿选择全部段...

雾隐雾现的至渝博客 5万+

PHP 浮点数的加减乘除

$a--浮点数1 $b--浮点数2 $c--小数点 加: $result= bcadd( $a, $b, $c); 减: $result= bcsub( $a, $b, $c); 乘: $result= bcmul( $a, $b, $c); 除: $result= bcdiv( $a, $b, $c);   bcadd — 将两个高精度数字相加   bccomp — 比较两个高精度数字,返回-1, 0, 1   bcdiv — 将两个高精度数字相除   bcmod — 求高精度数字..

laxexue的博客 1877

ArcGIS标注(二分式、三分式、条件分类标注、上下标、牵引线、文字格式化…)

ArcGIS中的各种标注方法、可能遇到的问题和细节。

m0_73306837的博客 5268

深度学习 load_data_fashion_mnist

pytorch 中报错:PermissionError: [WinError 5] 拒绝访问。: '…/data’ 在学习李沐大神动手学习深度学习卷积神经网络章节中,调用d2l包中load_data_fashion_mnist报错,这可能是***权限***的问题。 batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size,batch_size) 我的解决方法是 重新定义一下 load_data_fashi

纸上得来终觉浅,绝知此事要躬行 9148

PHP BC高精准度函数库

bcadd — 2个任意精度数字的加法计算 <?php $a = '1.234'; $b = '5'; echo bcadd($a, $b); // 6 echo bcadd($a, $b, 4); // 6.2340 ?> bccomp — 比较两个任意精度的数字 返回值: 如果两个数相等返回0, 左边的数left_operand比较右边的数right_operand大返回1, 否则返回-1. <?php echo bccomp('1', '2') . "\n.

0_0 380

ROS2与Gazebo协同实现多机器人避障仿真

本文详细介绍了如何利用ROS2与Gazebo协同搭建多机器人避障仿真环境。通过创建SDF机器人模型、编写多机器人启动文件以及集成基础避障算法,构建了一个低成本、高效率的虚拟测试平台,为AGV编队、机器人集群等项目的算法验证与迭代提供了完整解决方案。

weixin_29065659的博客 295

php中高精度数字相加,PHP 高精度运算的简单实现

首先PHP 自身语言的特性是弱类型,语言的弱类型必将产生的类型转换的问题首先看一段代码:$a = 0.1;$b = 0.7;var_dump(($a + $b) == 0.8); //false得到的结果是 False !关于 PHP Float类型 的说明官方给出的是 :浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11...

weixin_36238706的博客 1344

VAY 是 SAP 自动科目确定(OBYC-GBB)中的科目修改码,专用于带科目分配对象的销售订单发货场景,核心是触发 “Dr 成本要素科目(如销售费用 / 特定成本对象) Cr 库存商品” 的分录,

摘要:VAY是SAP中用于带科目分配对象(如成本中心、WBS)的销售订单发货的科目修改码,与标准VAX场景不同,它生成"借成本要素科目/贷库存商品"的分录。配置路径为OBYC-GBB-VAY,需确保借方科目为成本要素。典型业务场景包括免费样品、项目专用发货等。常见问题包括VAY未触发或科目记账错误,需检查销售订单科目分配、移动类型设置及OBYC配置。特殊场景建议单独配置科目以便费用分析。

金牌架构师 1253

windows 应用爬虫: exe自动操作

之前写了那么多关于手机和网页爬取,今天就写一期关于exe的爬取,exe的爬取其实也是类似的,一个方式是抓包,还有一个模拟人工界面获取元素数据。抓包肯定是最直接,数据也是最全的, 有些数据不一定会显示在界面上,或者必须通过一定交付方式,才能显示到页面(比如移动鼠标到具体元素上)。本文依旧采用python方式,先说说怎么通过界面方式驱动应用点击和数据获取。

youbingchen的博客 888

浮点数精度丢失问题详解

请看以下Go代码,会返回 0.7 吗? var num float32 for i := 0; i < 7; i++{ num = num + 0.1 } fmt.Println(num) 答案可能出人意料,是:0.70000005 0.70000005 也许有人会问,是不是Go语言的问题?换其他语言试试? OK,我们换JS试试。 答案依然令人意外。 除此之外,你还可以试试C、C++、Java、PHP等其他语言的float类型相加,看得到

菜刚RyuGou的专栏 3万+

yolov8知识蒸馏代码详解:支持logit和feature-based蒸馏

特别地,在COCO数据集上对MAP中的RetinaNet检测器(resnet50主干)获得了3.4%的性能提升,在Cityscapes数据集上, 针对mIoU指标,PSPNET(resnet-18 backbone)获得5.81%的性能提升。大部分的KD方法都是通过algin学生网络和教师网络的归一化的feature map, 最小化feature map上的激活值的差异。MGD是一种真正通用的基于特征feature的知识蒸馏方法,它可以用于各种任务,包括图像分类,目标检测,语义分割和实例分割。

@bangbang的博客 7286

php浮点数精度的解决方式

背景 在写代码的时候,遇到一些浮点数运算,例如:单价乘以数量等于总价,很习惯的写法是 $total = $price * $num;大部分情况下,这样是没问题的,但是如果是涉及到钱的计算,订单或者金融数据的计算,这个时候问题就大了,就算是保留4位小数,亿级别的订单,就会有上万的计算误差,如果是淘宝这样的,这个锅谁来背? 演示 很多示例都是0.58这个数,因为这个数比较特殊,其他的也有很多这样的数 ...

szulilin的博客 1461

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

php 浮点数精准相加,简单谈谈php浮点数精确运算

摘要:如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,所以基本上大部分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面我们介绍一下一些常用的BC高精确度函数使用。bc是Binary Calculator的缩写。bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, ...

weixin_35133814的博客 1132

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PHP精度计算问题

如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的,我用python也遇到这个问题。所以基本上大部 分语言都提供了精准计算的类库或函数库,比如php有BC高精确度函数库,下面达内php培训老师介绍一下一些常用的BC高精确度函数使用。

daixuzong的博客 1271

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

php中浮点数计算问题整理

本文讲的是php中浮点数计算问题整理, 如果用php的+-/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的。 如果用php的+-/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58100 );会打印57,而...

Again yy 1496

不可忽视的PHP数据精度损失问题

我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。不知大家在开发过程中有没有常常会遇到数据精度问题呢,类似下面这样的:&l...

架构精进之路 2284

PHP浮点数精度损失问题

      首先抛出一个问题,如下类似: &lt;?php $a = 0.57; echo intval(floatval($a) * 100); //56     结果可能有点出乎你的意外,PHP遵循IEEE 754双精度:     浮点数, 以64位的双精度, 采用1位符号位(E), 11指数位(Q), 52位尾数(M)表示(一共64位)     符号位:最高位表示数据的...

四维空间 2299

php-浮点数计算 高精度计算函数

真的很有用,写代码估计都会遇到的浮点类型计算的坑,谢谢谦信君的博客内容。 原文链接:htytps://www.cnblogs.com/kenshinobiy/p/10797902.html php-浮点数计算,double类型数加减乘除必须用PHP提供的高精度计算函数 一、前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的...

beyond_1990的博客 878

解决php使用intval将浮点数转成整型时出现精度失真的问题

最近在写一个抽奖功能时出现了将浮点数转成整型时出现了精度失真的问题 问题复现: $test = 1.14; echo $test * 100;//打印浮点数 echo '<br/>'; echo intval($test *100);//将浮点数转化成整型 打印出来的信息为: 114 113 如上就出现了精度失真的问题了,那么如何解决上面的问题呢? 1:将浮点数转成字符型然后再转为整型 如: $test = 1.14; echo $test * 100;//打印浮点数 ec

huaweichenai的博客 683

php整数和浮点数比较,php 浮点数怎么进行比较?

浮点数在转换过程中都会有误差的,所以浮点数不能直接比较其大小,一般在比较两个浮点数的时候是比较他们之间的差值,如果两个数之间的差值处于一个能接受的范围之内的话,那么,我们就认为这两个浮点数是相等的。本篇文章主要介绍了php浮点数比较方法,具有很好的参考价值。下面跟着小编一起来看下吧浮点数运算精度问题首先看一个例子:...

weixin_29593445的博客 1031

php浮点数乘法计算,PHP中浮点数的计算问题

与笔记使人精确。史鉴使人明智;诗歌使人巧慧;数学使人精细;博物使人深沉;逻辑与修辞使人善辩。以下是小编为大家搜索整理的PHP中浮点数的计算问题,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮...

weixin_42499999的博客 587

PHP 浮点数高精度运算

现在一家电商公司入职,做的是数据分析。 用php经常会于一些计算报表。难免会遇到浮点数运算的 坑。 $f = 0.58; var_dump(intval($f * 100)); //为啥输出57我们期待的结果应该是 0.58 结果是有问题的。 我们来看看php官方如何解释的: PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.1...

weixin_30652271的博客 178

php高精度计算

一、前方有坑 php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦。比如今天工作终于到的一个案例: $a = 2586; $b = 2585.98; var_dump($a-$b); 期望的结果是:float(0.02) 实际结果: float(0.019999999999982) 人生有坑,处处提防 二、防坑攻略: 1、通过乘100的方式转化为整数加减,然后在除以100转化回来…… 2、使用num

hechenhongbo的博客 7127
上一篇: laravel 使用原生sql语句
下一篇: AWS IoT分享
cofecode
博客等级 码龄9年 43粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值