标签: bcmath

致命错误:未捕获错误:调用未定义函数bcadd()

安装"eduTrac SIS"并访问"仪表板"后出现此错误

Ubuntu 16.4,PHP 7.0(php7.0-fpm),Apache2,Nginx,

URL显示错误500并显示nginx/error.log,

FastCGI发送到stderr:"PHP消息:PHP致命错误:未捕获错误:在/ var/www/html/eduTrac-SIS/app/src/vendor/phpbenchmark/phpbenchmark/lib/PHPBenchmark中调用未定义函数PHPBenchmark\bcadd() /Utils.php:18

php nginx bcmath

7
推荐指数
2
解决办法
9670
查看次数

我应该将 BCMath 用于大约 1,2 或 3 位小数的值吗?

我的数据库中有大约 10-15 个数字,精度为 1、2 或 3 位小数,有符号和无符号。

正在使用的数据类型示例:

decimal(10,3), decimal(10,2), decimal(10,1)
Run Code Online (Sandbox Code Playgroud)

我在 PHP 中计算它们是这样的:

$result = ($value1from_col1 + ($value2from_col2 * 30)/500) * 0.453;
Run Code Online (Sandbox Code Playgroud)

然后我使用一些这样的round()功能:

$result_round = round($result, 2, PHP_ROUND_HALF_UP);
Run Code Online (Sandbox Code Playgroud)

结果$result_round最大:100.000,999

我正在检查:多少精度的 bcmath PHP 库? 并且答案指出,如果您不使用 round()、printf 等函数,这不会成为问题。

那么我应该使用 BCMath-extension 吗?(只是因为我正在使用round()

php bcmath

6
推荐指数
1
解决办法
1448
查看次数

PHP:如何将数字提高到(微小)分数指数?

我正在使用PHP进行计算bcmath,需要e通过小数指数来提高.不幸的是,bcpow()只接受整数指数.指数通常比浮点数允许的精度更高,因此正常的算术函数不会削减它.

例如:

$e = exp(1);
$pow = "0.000000000000000000108420217248550443400745280086994171142578125";
$result = bcpow($e, $pow);
Run Code Online (Sandbox Code Playgroud)

结果是"1"错误,"bc数学警告:指数中的非零刻度".

我可以用另一种功能代替bcpow()吗?

php math bcmath

6
推荐指数
1
解决办法
613
查看次数

会计系统-MySQL和PHP精度

我正在用 PHP 和 MySQL 构建一种会计系统。我的数据库包含DECIMAL (11,2)货币列,以及DECIMAL货币操作中使用的所有其他值(例如要应用的百分比)。我以前从未编写过类似的程序,所以我不确定我做的是正确的事情。

我在数据库中使用的精度级别是否正确?

在 PHP 方面:

我是否应该对以后可能存储在数据库中的任何值使用 BC Math 函数?

我还必须使用,小数点和.千位分隔符来格式化货币值。我知道number_format,最近发现money_format,但手册说两者都使用浮子进行操作。

我可以使用number_formatmoney_format作为将要显示的值,或导出到 CSV 或 Excel 的值吗?

php mysql currency floating-accuracy bcmath

5
推荐指数
1
解决办法
1349
查看次数

用PHP中的bcmath计算第N个根

我们正在寻找PHP中的第N个根.我们需要使用非常大的数字来执行此操作,并且Windows计算器返回2.使用以下代码我们得到1.是否有人知道这是如何工作的?

echo bcpow(18446744073709551616, 1/64);
Run Code Online (Sandbox Code Playgroud)

php bcmath

5
推荐指数
1
解决办法
1140
查看次数

PHP bcmath与Python Decimal

我正在使用PHP的bcmath库来执行定点数的操作.我期望获得Python Decimal类的相同行为,但我很惊讶地发现以下行为:

// PHP:
$a = bcdiv('15.80', '483.49870000', 26);
$b = bcmul($a, '483.49870000', 26);
echo $b;  // prints 15.79999999999999999999991853
Run Code Online (Sandbox Code Playgroud)

Decimal在Python中使用s我得到:

# Python:
from decimal import Decimal
a = Decimal('15.80') / Decimal('483.49870000')
b = a * Decimal('483.49870000')
print(b)  # prints 15.80000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

这是为什么?当我使用它来执行非常敏感的操作时,我想找到一种方法来在PHP中获得与Python相同的结果(即(x / y) * y == x)

php python fixed-point decimal bcmath

5
推荐指数
1
解决办法
451
查看次数

为什么bcmul返回的数字与我指定的数字不同?

我似乎无法在php.net文档中找到解释以下结果的任何内容:

$ php -r 'var_dump(bcsub("0.3", "0.2", 4));'
string(6) "0.1000"
$ php -r 'var_dump(bcmul("0.3", "0.2", 4));'
string(4) "0.06"
Run Code Online (Sandbox Code Playgroud)

减法结果正是我所期望的那样(我指定了一个4位数的刻度,它在结果中给了我一个).乘法结果不是(我指定了一个4位数的刻度,但它在结果中给了我一个2位数的刻度).为什么不同?

注意: 我已经知道如何使用number_format(),我也在0.06 === 0.0600数学上知道.我只对理解为什么BC Math似乎在结果的规模上采取不同的行为感兴趣.

注意#2: 如上所述,number_format()不是这个问题的答案,所引用的"重复问题"中使用的答案都建议使用number_format().我完全知道这个函数可以用来将数字格式化为指定的精度.我只是想知道为什么这些函数的返回值有不同的比例,而不是如何修复它们.

php bcmath

4
推荐指数
1
解决办法
566
查看次数

如何使用 bcmath 以好的方式添加许多值?

如果我想将多个值与 BCMath 一起添加,我可以这样做:

$total_cost1 = bcadd($value1, $value2);
$total_cost2 = bcadd($value3, $value4);
$total_cost3 = bcadd($value5, $value6);
$total_cost4 = bcadd($value7, $value8);

$total_cost = 
    bcadd(bcadd($total1_cost, $total2_cost), 
    bcadd($total3_cost, $total4_cost));
Run Code Online (Sandbox Code Playgroud)

但它使它变得如此不可读,并且很容易出错。请告诉我还有另一种方法可以解决这个问题......!?

php bcmath

3
推荐指数
1
解决办法
1043
查看次数

使用 php 将 Wei 转换为 Ethereum

我正在尝试使用 php 和 bc-math 扩展将 wei 转换为 eth。

尝试使用此函数转换它时:

function wei2eth($wei)
{
    return bcdiv($wei,1000000000000000000,18);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

警告:bcdiv():在 C:\xampp\htdocs\test\coindata.php 第 121 行被零除

有没有人使用 bc-math 扩展和 bcdiv 将 wei 转换为 eth 并知道,为什么我会收到此错误?

提前致谢

php bcmath ethereum

3
推荐指数
1
解决办法
2626
查看次数

如果将指数数传递给其函数,PHP BCMath 无法处理指数数,PHP BCMath 返回“bcmath function argument is not well-formed”

我研究一些小数,如 0.0000687、0.0000063241、0.0000454。我使用 BCMath 来获得最精确的结果,因为它涉及金钱计算,到目前为止,BCMath 对我修复之前遇到的错误非常有帮助。但我发现如果将 PHP 自动转换的指数值传递给 BCMath,BCMath 就无法正常工作。下面是示例代码:

 $x = 0.00002123; // let say I got this value from the other computation;
                  // this $x value will automatically turn to exponential 
                  //  value by php because it have few of leading 0 after the '.' 
 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

PHP 开始将实数转换为指数数的模式是:(见下图)

在此输入图像描述

从上图可以看出,PHP 开始将实数转换为指数数的模式是当前导 0 的数字达到 4 次 -> 0.0000xxxxx(PHP 开始转换为指数的模式)。

然后,假设这个变量 $x 将被计算到 PHP BCMath 函数之一中:

# First, I work with float number 

$calculation1 = bcadd($x,5,12); // adding variable $x to 5 
$calculation2 …
Run Code Online (Sandbox Code Playgroud)

php bcmath laravel php-7

3
推荐指数
1
解决办法
8656
查看次数