• 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-2】第二章 Java基本语法01:变量与运算符
    谷粒商城学习笔记
    网络安全笔记-文件包含
    jaotc
    vue 项目挂载 刷新后报404
    GPDB vs CK - NYC taxi data 简单测试对比
    web前端面试题附答案040-请说说字符串的截取
    JDK下载和配置环境变量
    Unity团结引擎使用总结
    设计模式:状态模式(C++实现)
  • 原文地址:https://blog.csdn.net/qq_37468919/article/details/124425713