• php 小数计算 结果变无限小数解决方案


    示例

    $a = 1; $b = 3 ;$c = 2.3
    $a *$b *$c 的结果可能变成 6.8999999999999995
    
    • 1
    • 2

    解决方案用更高精度的函数计算

    bcadd — 两个任意精度数字的加法计算

    //对 $num1 和 $num2 求和。
    
    bcadd($num1, $num2, $scale)
    
    //参数
    //$num1
    //左操作数,字符串类型。
    
    //$num2
    //右操作数,字符串类型。
    
    //$scale
    //设置结果中小数点后的小数位数。如果未设置,则默认为 0。
    
    //返回值
    //以字符串返回两个操作数求和之后的结果。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    bcsub — 两个任意精度数字的减法

    //$num1 减去 $num2。
    
    bcsub($num1, $num2, $scale)
    
    //参数
    //$num1
    //字符串类型的左操作数。
    
    //$num2
    //字符串类型的右操作数。
    
    //$scale
    //此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
    
    //返回值
    //以 string 类型返回减法之后的结果。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    bcmul — 两个任意精度数字乘法计算

    //≈num1 乘以 $num2。
    
    bcmul($num1, $num2, $scale)
    
    //参数
    //$num1
    //字符串类型的左操作数。
    
    //$num2
    //字符串类型的右操作数。
    
    //$scale
    //此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
    
    //返回值
    //返回字符串类型的结果。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    bcdiv — 两个任意精度的数字除法计算

    //$num1 除以 $num2。
    
    bcdiv($num1, $num2, $scale)
    
    //参数
    //$num1
    //被除数,字符串类型。
    
    //$num2
    //除数,字符串类型。
    
    //$scale
    //此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
    
    //返回值
    //返回字符串类型的结果。如果 $num2 是 0 结果为 null。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    bccomp — 比较两个任意精度的数字

    //比较 num1 和 num2, 并且返回整型数字的结果。
    
    bccomp($num1, $num2, $scale)
    
    //参数
    //$num1
    //左边的运算数,是一个字符串。
    
    //$num2
    //右边的运算数,是一个字符串。
    
    //$scale
    //可选的 scale 参数被用作设置指示数字, 在使用来作比较的小数点部分。
    
    //返回值
    //两个数相等时返回 0; $num1 比 $num2 大时返回 1; 其他则返回 -1。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    bcmod — 任意精度数字取模

    //对 $num1 使用 $num2 取模。 除非 $num2 是零,否则结果必定和 $num1 有相同的符号。
    
    bcmod($num1, $num2)
    
    //参数
    //$num1
    //string 类型的被除数。
    
    //$num2
    //string 类型的除数。
    
    //返回值
    //返回字符串类型取模后的结果,如果 $num2 为 0 则返回 null。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    bcpow — 任意精度数字的乘方

    //$num 的 $exponent 次方运算。
    
    bcpow($num, $exponent, $scale)
    
    //参数
    //$num
    //string 类型的底数。
    
    //$exponent
    //string 类型的指数。 如果指数不是整数,将被截断。 指数的有效范围取决于平台,但起码支持 -2147483648 到 2147483647 的范围。
    
    //$scale
    //此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
    
    //返回值
    //返回字符串类型的结果。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    
    ## bcscale — 设置/获取所有 bc math 函数的默认小数点保留位数
    
    ```php
    
    //设置所有 bc math 函数在未设定情况下的小数点保留位数。
    bcscale(int $scale)
    
    //获取当前的小数点保留位数。
    bcscale(null $scale = null)
    
    
    //参数
    //$scale
    //小数点保留位数。
    
    //返回值
    //设置的时候,返回之前的小数点保留位数。否则就是返回当前的位数。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    bcsqrt — 任意精度数字的二次方根

    //返回 $num 的二次方根。
    
    bcsqrt($num, $scale)
    
    //参数
    //$num
    //字符串类型的操作数。
    
    //$scale
    //此可选参数用于设置结果中小数点后的小数位数。如果未设置,则默认为 0。
    
    //返回值
    //以 string 类型返回二次方根的结果,如果 num 是负数则返回 null。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    bcpowmod — 用于将任意精度的基数提高到另一个按指定模数减少的指数

    //此函数接受三个任意精度的数字作为字符串,并在将结果缩放到指定的精度后返回以数字为底的指数模的基数。
    
    bcpowmod ( $base, $exponent, $mod, $scale)
    
    //$base:此参数为字符串类型,表示左操作数或数字(即增加幂的基础)。此参数是必需的。
    //$exponent:此参数是字符串类型,代表右操作数或代表指数的数字之一。此参数是必需的。
    //$mod:此参数为字符串类型,并且接受表示模数的操作数或数字。此参数是必需的。
    //$scale:此参数为int类型,是可选的。该参数表示(base)结果中小数点后出现的位数exponent)%mod。默认值为零。
    
    ## 
    ## 
    ## 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    java--强制类型转换
    FBA海运是什么,FBA海运的优势是什么
    关于jupyter notebook的使用经验
    没想到吧,Spring中还有一招集合注入的写法
    DSPE-PEG-Biotin,385437-57-0,磷脂-聚乙二醇-生物素用于生物分子的检测和纯化
    黑客新工具,可窃取Gmail、雅虎、Outlook等电子邮件
    设计模式-行为型模式-责任链模式
    Day796.什么是线程数据的强、弱一致性 -Java 性能调优实战
    [运维|数据库] PostgreSQL数据库对MySQL的 READS SQL DATA 修饰符处理
    使用 Liquibase 管理数据库版本 - SpringBoot 2.7 .2 实战基础
  • 原文地址:https://blog.csdn.net/qq_37468919/article/details/124425713