×

php5.4bcadd

php5.4bcadd的简单介绍

admin admin 发表于2023-03-27 17:48:10 浏览40 评论0

抢沙发发表评论

本文目录一览:

PHP计算百分比的公式函数,如何把数值装进计算

1、按题意字面理解,不用函数,直接在单元格输入公式“=25/336”,回车,即可返回所需比例值。 2、如果336人是一列(如A1:A336)姓名明细,25人是在另列(如B1:B336)用“派出”、“留用”、“等待”等字样标出,则可在任意单元格输入公式“=COUNTIF(B1:B336,"派出")/COUNTA(A1:A336)”进行计算。 建议,将你的示例上传,以便有的放矢。

ThinkPHP出现Call to undefined function bcadd怎么解决

你是什么系统 linux的话是curl插件没装好,检查并重装一下。 windows的也是PHP环境检查一下,看是否支持getcurl。

php数组处理问题

直接给你上代码和效果了。

建议1:合计最后一行可以让前端处理。

建议2:下次在发问题的时候,把所有场景的数组已文本的形式贴在问题里,不然在给你解决问题的过程中数据部分都得照着你的图片打出来(坑~)

效果图:

php代码:

?php

$array = array(

    array(

        'create_time' = '2018-02-14 15:36:32',

        'receivable_balance' = '200.00',

        'name' = '李四',

        'business_id' = 2

    ),

    array(

        'create_time' = '2018-02-21 15:36:31',

        'receivable_balance' = '200.00',

        'name' = '李四',

        'business_id' = 2

    ),

    array(

        'create_time' = '2018-02-21 15:30:13',

        'receivable_balance' = '-1000.00',

        'name' = '王五',

        'business_id' = 3

    ),

    array(

        'create_time' = '2018-02-27 15:30:13',

        'receivable_balance' = '-1000.00',

        'name' = '王五',

        'business_id' = 3

    ),

    array(

        'create_time' = '2018-02-27 15:30:14',

        'receivable_balance' = '-2000.00',

        'name' = '王五',

        'business_id' = 3

    ),

    array(

        'create_time' = '2018-02-28 15:30:14',

        'receivable_balance' = '2000.00',

        'name' = '王五',

        'business_id' = 3

    )

);

// 把所有的日期拿出来组合 table 标题

$dates = [];

foreach ($array as $key = $val) {

    $date = date('Y-m-d', strtotime($val['create_time']));

    if (!in_array($date, $dates)) {

        array_push($dates, $date);

    };

}

// 日期正序

sort($dates);

/**

 * 组合新数组

 */

$listsArray = [];

$sumArray = [];

foreach ($array as $key = $val) {

    $date = date('Y-m-d', strtotime($val['create_time']));

    // 列表

    if (isset($listsArray[$val['name']][$date])) {

        // 如果某人一天多次进行累加

        $listsArray[$val['name']][$date]['receivable_balance'] = bcadd($listsArray[$val['name']][$date]['receivable_balance'], $val['receivable_balance'], 2);-php5.4bcadd

    } else {

        $listsArray[$val['name']][$date] = $val;

    }

    // 合计

    if (!isset($sumArray[$date]['sum'])) { // 如果当天日期没有的设置为 0

        $sumArray[$date]['sum'] = 0.00;

    }

    $sumArray[$date]['sum'] = bcadd($sumArray[$date]['sum'], $val['receivable_balance'], 2);

}

$table = "table border='1'";

// 标题行开始

$table .= "tr";

$table .= "td序号/tdtd业务员/td";

foreach ($dates as $date) {

    $table .= "td" . $date . "/td";

}

$table .= "/tr";

// 标题行结束

// 列表数据开始

$i = 1;

foreach ($listsArray as $name = $val) {

    $table .= "tr";

    $table .= "td" . $i . "/tdtd" . $name . "/td";

    foreach ($dates as $date) {

        if (isset($val[$date])) {

            $table .= "td" . $val[$date]['receivable_balance'] . "/td";

        } else {

            $table .= "td" . "--" . "/td";

        }

    }

    $table .= "/tr";

    $i++;

}

// // 列表数据结束

// 合计数据开始

$table .= "tr";

$table .= "tdnbsp;/tdtd合计:/td";

foreach ($dates as $date) {

    $table .= "td" . $sumArray[$date]['sum'] . "/td";

}

$table .= "/tr";

// 合计数据结束

$table .= "/table";

echo $table;

php里面bcadd是什么意思

PHP 为任意精度数学计算提供了二进制计算器(Binary Calculator),它支持任意大小和精度的数字,以字符串形式描述

bcadd — 加法

bccomp — 比较

bcdiv — 相除

bcmod — 求余数

bcmul — 乘法

bcpow — 次方

bcpowmod — 先次方然后求余数

bcscale — 给所有函数设置小数位精度

bcsqrt — 求平方根

bcsub — 减法

为什么php用小数点相减不对呢

一则浮点数计算例子如下:

代码如下:

$a = 0.2+0.7;

$b = 0.9;

var_dump($a == $b);

打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的。

对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333...。-php5.4bcadd

我们将上面的变量用双精度格式打印出来:

代码如下:

$a = 0.2+0.7;

$b = 0.9;

printf("%0.20f", $a);

echo 'br /';

printf("%0.20f", $b);

输出结果如下:

代码如下:

0.89999999999999991118

0.90000000000000002220

显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。-php5.4bcadd

所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,因此使用 bcadd() 函数来对浮点数想加并进行精度转换(为字符串):

代码如下:

var_dump(bcadd(0.2,0.7,1) == 0.9); // 输出:bool(true)

浮点数取整

在《PHP 取整函数 ceil 与 floor》一文中,曾有例子:

代码如下:

?php

echo ceil(2.1/0.7); // 输出:4

?

经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的:

代码如下:

?php

printf("%0.20f", (2.1/0.7)); // 输出:3.00000000000000044409

?

经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,因此使用 round() 函数处理一下即可:

代码如下:

?php

echo ceil( round((2.1/0.7),1) );

?

虽然 round() 函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。

PHP-bc函数及其应用详解

bcadd —— 两个任意精度数字的加法计算 (PHP 4, PHP 5, PHP 7, PHP 8)

bcadd ( string $num1 , string $num2 , ?int $scale = null ): string

注:对 num1 和 num2 求和。

参数:

num1 — 左操作数,字符串类型。

num2 — 右操作数,字符串类型。

scale — 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。如果未设置,则默认为 0。 现在 scale 可以为 null。 -php5.4bcadd

返回值: 以字符串返回两个操作数求和之后的结果。

范例:

bcsub —— 两个任意精度数字的减法 (PHP 4, PHP 5, PHP 7, PHP 8)

bcsub ( string $num1 , string $num2 , ?int $scale = null ): string

注: num1 减去 num2 。

参数:

num1 — 左操作数,字符串类型。

num2 — 右操作数,字符串类型。

scale — 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。如果未设置,则默认为 0。 现在 scale 可以为 null。 -php5.4bcadd

返回值: 以 string 类型返回减法之后的结果。

范例:

bcmul —— 两个任意精度数字乘法计算 (PHP 4, PHP 5, PHP 7, PHP 8)

bcmul ( string $num1 , string $num2 , ?int $scale = null ): string

注: num1 乘以 num2 。

参数:

num1 — 左操作数,字符串类型。

num2 — 右操作数,字符串类型。

scale — 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。如果未设置,则默认为 0。 现在 scale 可以为 null。 -php5.4bcadd

返回值: 以 string 类型返回减法之后的结果。

范例:

bcp —— 两个任意精度的数字除法计算 (PHP 4, PHP 5, PHP 7, PHP 8)

bcp ( string $num1 , string $num2 , ?int $scale = null ): string

注: num1 除以 num2 。

参数:

num1 — 左操作数,字符串类型。

num2 — 右操作数,字符串类型。

scale — 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。如果未设置,则默认为 0。 现在 scale 可以为 null。 -php5.4bcadd

返回值: 以 string 类型返回减法之后的结果。

范例:

bccomp —— 比较两个任意精度的数字 (PHP 4, PHP 5, PHP 7, PHP 8)

bccomp ( string $num1 , string $num2 , ?int $scale = null ): int

注: 比较 num1 和 num2 , 并且返回整型数字的结果。

参数:

num1 — 左边的运算数,是一个字符串。

num2 — 右边的运算数,是一个字符串。

scale — 可选的 scale 参数被用作设置指示数字, 在使用来作比较的小数点部分。

返回值: 两个数相等时返回 0; num1 比 num2 小时返回 -1; 其他则返回 1。现在 scale 可以为 null。

范例:

bcmod —— 任意精度数字取模 (PHP 4, PHP 5, PHP 7, PHP 8)

bcmod ( string $num1 , string $num2 , ?int $scale = null ): string

注: 对 num1 使用 num2 取模。 除非 num2 是零,否则结果必定和 num1 有相同的符号。

参数:

num1 — string 类型的被除数。

num2 — string 类型的除数。

scale — 现在 scale 可以为 null。

返回值: 返回字符串类型取模后的结果,如果 num2 为 0 则返回 null。

范例:

bcpow—— 任意精度数字的乘方 (PHP 4, PHP 5, PHP 7, PHP 8)

bcpow ( string $num , string $exponent , ?int $scale = null ): string

注: num 的 exponent 次方运算。

参数:

num — string 类型的底数。

exponent — string 类型的指数。 如果指数不是整数,将被截断。 指数的有效范围取决于平台,但起码支持 -2147483648 到 2147483647 的范围。

scale — 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。如果未设置,则默认为 0。

返回值: 返回字符串类型的结果。

范例:

bcpowmod —— 先取次方然后 取模 。 (PHP 5, PHP 7, PHP 8)

bcpowmod ( string $num , string $exponent , string $modulus , ?int $scale = null ): string -php5.4bcadd

注: 先取次方然后取模。

参数:

base — 左操作数。它是一个字符串类型的参数。

exponent — string 类型的指数。 指数的正确操作数。

modulus — string 类型的 参 数。 接受表示模数的操作数。

scale — 一个整数类型参数。它说明 ( base exponent %mod ) 结果中小数点后的位数。其默认值为 0。

返回值: 该函数将结果作为字符串返回。或者,如果模数为 0 或指数为负,则返回 False。

范例:

bcscale —— 设置/获取所有 bc math 函数的默认小数点保留位数 (PHP 4, PHP 5, PHP 7, PHP 8)

bcscale ( int $scale ): int

设置所有 bc math 函数在未设定情况下的小数点保留位数。

bcscale ( null $scale = null ): int

注: 获取当前的小数点保留位数。

参数:

scale — 小数点保留位数。

返回值: 设置的时候,返回之前的小数点保留位数。否则就是返回当前的位数。

范例:

bcsqrt —— 任意精度数字的二次方根 (PHP 4, PHP 5, PHP 7, PHP 8)

bcsqrt ( string $num , ?int $scale = null ): string

注: 返回 num 的二次方根。

参数:

num — string 类型的操作数 。

scale — 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。如果未设置,则默认为 0。

返回值: 以 string 类型返回二次方根的结果,如果 num 是负数则返回 null。

范例: