首页 » 网站推广 » php精度问题技巧_PHP开拓中数据精度问题的处理

php精度问题技巧_PHP开拓中数据精度问题的处理

访客 2024-11-13 0

扫一扫用手机浏览

文章目录 [+]

精度的问题并不是PHP本身的问题,只要有浮点数打算的可能都会存在精度的问题,在这里我们不穷究详细的产生缘故原由,想理解详细的需求产生问题可以查看浮点数的表示。

首先我们来看一个大略的例子:

php精度问题技巧_PHP开拓中数据精度问题的处理

$a = 0.1;$b = 0.7;var_dump(($a+$b) == 0.8);

打印输出的结果是:boolean false,很奇怪吧,正常我们以为这该当便是相等的,该当输出为:boolean true 才对。
这是由于不可能精确地用有限位数表达某些十进制分数。
例如:十进制的 1/3 变成了 0.3333333...

php精度问题技巧_PHP开拓中数据精度问题的处理
(图片来自网络侵删)

那么我怎么来办理这个精度打算的问题呢?PHP4版本以上为我们准备一下函数:

bcadd — 2个任意精度数字的加法打算bccomp — 比较两个任意精度的数字bcdiv — 2个任意精度的数字除法打算bcmod — 对一个任意精度数字取模bcmul — 2个任意精度数字乘法打算cpow — 任意精度数字的乘方bcpowmod — Raise an arbitrary precision number to another, reduced by a specified modulusbcscale — 设置所有bc数学函数的默认小数点保留位数bcsqrt — 任意精度数字的二次方根bcsub — 2个任意精度数字的减法

我们来看看bcadd的利用:

bcadd ( string $left_operand , string $right_operand , int $scale = ? ) : string// $left_operand $right_operand 都为相加的两个数,$scale 为小数点后的小数位数

我们利用bcadd来改造一下前面的代码来看看运行结果:

$a = 0.1;$b = 0.7;var_dump(bcadd($a,$b,2) == 0.8);

这次打印输出便是:boolean true

接着再看看我们常常在比拟账户余额充足的时候可以利用的方法:bccomp

bccomp ( string $left_operand , string $right_operand , int $scale = int ) : int

如果两个数相等返回0,左边的数left_operand比较右边的数right_operand大返回1,否则返回-1。

echo bccomp(2, 3); // -1echo bccomp(1.0002, 1, 3); // 0echo bccomp(3.24553533, 3, 5); // 1

标签:

相关文章

今日头条算法引领个化信息时代的变革

信息爆炸时代已经到来。每个人都是信息的接收者和传播者。面对海量的信息,人们往往感到无所适从。为了解决这一问题,各大互联网公司纷纷推...

网站推广 2025-01-31 阅读1 评论0

今日头条算法信息推荐的秘密武器

信息爆炸的时代已经来临。人们每天都会接触到大量的信息,而如何从这些信息中筛选出有价值的内容,成为了亟待解决的问题。今日头条算法作为...

网站推广 2025-01-31 阅读1 评论0

今日头条算法精准推荐背后的技术奥秘

信息爆炸的时代已经来临。我们每天都要面对海量的信息,如何从这些信息中筛选出自己感兴趣的内容,成为了每个人都关心的问题。今日头条作为...

网站推广 2025-01-31 阅读1 评论0