php 小数计算 结果变无限小数解决方案
php 小数计算 结果变无限小数解决方案
- 示例
- 解决方案用更高精度的函数计算
- bcadd — 两个任意精度数字的加法计算
- bcsub — 两个任意精度数字的减法
- bcmul — 两个任意精度数字乘法计算
- bcdiv — 两个任意精度的数字除法计算
- bccomp — 比较两个任意精度的数字
- bcmod — 任意精度数字取模
- bcpow — 任意精度数字的乘方
- bcsqrt — 任意精度数字的二次方根
- bcpowmod — 用于将任意精度的基数提高到另一个按指定模数减少的指数
示例
$a = 1; $b = 3 ;$c = 2.3
$a *$b *$c 的结果可能变成 6.8999999999999995
解决方案用更高精度的函数计算
bcadd — 两个任意精度数字的加法计算
//对 $num1 和 $num2 求和。
bcadd($num1, $num2, $scale)
//参数
//$num1
//左操作数,字符串类型。
//$num2
//右操作数,字符串类型。
//$scale
//设置结果中小数点后的小数位数。如果未设置,则默认为 0。
//返回值
//以字符串返回两个操作数求和之后的结果。
bcsub — 两个任意精度数字的减法
//$num1 减去 $num2。
bcsub($num1, $num2, $scale)
//参数
//$num1
//字符串类型的左操作数。
//$num2
//字符串类型的右操作数。
//$scale
//此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
//返回值
//以 string 类型返回减法之后的结果。
bcmul — 两个任意精度数字乘法计算
//≈num1 乘以 $num2。
bcmul($num1, $num2, $scale)
//参数
//$num1
//字符串类型的左操作数。
//$num2
//字符串类型的右操作数。
//$scale
//此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
//返回值
//返回字符串类型的结果。
bcdiv — 两个任意精度的数字除法计算
//$num1 除以 $num2。
bcdiv($num1, $num2, $scale)
//参数
//$num1
//被除数,字符串类型。
//$num2
//除数,字符串类型。
//$scale
//此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
//返回值
//返回字符串类型的结果。如果 $num2 是 0 结果为 null。
bccomp — 比较两个任意精度的数字
//比较 num1 和 num2, 并且返回整型数字的结果。
bccomp($num1, $num2, $scale)
//参数
//$num1
//左边的运算数,是一个字符串。
//$num2
//右边的运算数,是一个字符串。
//$scale
//可选的 scale 参数被用作设置指示数字, 在使用来作比较的小数点部分。
//返回值
//两个数相等时返回 0; $num1 比 $num2 大时返回 1; 其他则返回 -1。
bcmod — 任意精度数字取模
//对 $num1 使用 $num2 取模。 除非 $num2 是零,否则结果必定和 $num1 有相同的符号。
bcmod($num1, $num2)
//参数
//$num1
//string 类型的被除数。
//$num2
//string 类型的除数。
//返回值
//返回字符串类型取模后的结果,如果 $num2 为 0 则返回 null。
bcpow — 任意精度数字的乘方
//$num 的 $exponent 次方运算。
bcpow($num, $exponent, $scale)
//参数
//$num
//string 类型的底数。
//$exponent
//string 类型的指数。 如果指数不是整数,将被截断。 指数的有效范围取决于平台,但起码支持 -2147483648 到 2147483647 的范围。
//$scale
//此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
//返回值
//返回字符串类型的结果。
## bcscale — 设置/获取所有 bc math 函数的默认小数点保留位数
```php
//设置所有 bc math 函数在未设定情况下的小数点保留位数。
bcscale(int $scale)
//获取当前的小数点保留位数。
bcscale(null $scale = null)
//参数
//$scale
//小数点保留位数。
//返回值
//设置的时候,返回之前的小数点保留位数。否则就是返回当前的位数。
bcsqrt — 任意精度数字的二次方根
//返回 $num 的二次方根。
bcsqrt($num, $scale)
//参数
//$num
//字符串类型的操作数。
//$scale
//此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
//返回值
//以 string 类型返回二次方根的结果,如果 num 是负数则返回 null。
bcpowmod — 用于将任意精度的基数提高到另一个按指定模数减少的指数
//此函数接受三个任意精度的数字作为字符串,并在将结果缩放到指定的精度后返回以数字为底的指数模的基数。
bcpowmod ( $base, $exponent, $mod, $scale)
//$base:此参数为字符串类型,表示左操作数或数字(即增加幂的基础)。此参数是必需的。
//$exponent:此参数是字符串类型,代表右操作数或代表指数的数字之一。此参数是必需的。
//$mod:此参数为字符串类型,并且接受表示模数的操作数或数字。此参数是必需的。
//$scale:此参数为int类型,是可选的。该参数表示(base)结果中小数点后出现的位数exponent)%mod。默认值为零。
##
##
##