我需要模仿cec(),floor()和round()函数在bcmath数字上的确切功能,我已经发现了一个非常相似的问题,但不幸的是,由于缺乏支持,所提供的答案对我来说还不够好对于负数,并且缺少round()函数的precision参数.
我想知道是否有人能够为这个问题提出一个相当简短而优雅的解决方案.
所有输入都表示赞赏,谢谢!
我正在寻找一种用PHP 生成一个大随机数的方法,例如:
mt_rand($lower, $upper);
Run Code Online (Sandbox Code Playgroud)
我看到的距离越近gmp_random()但它不允许我指定下边界和上边界只有每个肢体的位数(我不知道它是什么).
编辑:Axsuuls答案似乎非常接近我想要的,非常类似于gmp_random,但在一个场景中似乎只有一个缺陷.
假设我不想在两者之间得到一个随机数:
和:
因此,如果函数名为BigRandomNumber():
BigRandomNumber($length = 31);
Run Code Online (Sandbox Code Playgroud)
这很容易返回超出指定边界的9999999999999999999999999999999.
如何使用最小/最大边界而不是长度值?
BigRandomNumber('1225468798745475454898787465154', '1225468798745475454898787465200');
Run Code Online (Sandbox Code Playgroud)
这应该返回1225468798745475454898787465 [154 .. 200]之间的随机数.
编辑:上面的帖子被删除了,这里是:
function compare($number1, $operator, $number2) {
$x = bccomp($number1, $number2);
switch($operator) {
case '<':
return -1===$x;
case '>':
return 1===$x;
case '=':
case '==':
case '===':
return 0===$x;
case '!=':
case '!==':
case '<>':
return 0!==$x;
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正试图弄清楚如何使用PHP中的任意精度数字.所以我想我的第一个问题是究竟什么是任意精度数学.我试着谷歌搜索一个很好的定义,但由于某种原因,没有人可以用简单的语言.
其次,PHP中的BCMath和GMP库有什么区别?我听说GMP的API是"更新鲜",但是我很高兴.一个更好吗?
我最后的问题是BCMath/GMP需要什么类型的数字.显然它需要字符串形式的正常整数(例如"5.34"),但我已经看到BCMath函数直接用于表示常规整数的八位字节字符串的实现(例如"\ x12\x23\x45\x67"),其中我听说被称为"bigint",但谷歌再也没有给我带来任何好处.
是否有任何库函数用于此目的,所以我不手动完成并冒险以TDWTF结束?
echo ceil(31497230840470473074370324734723042.6);
// Expected result
31497230840470473074370324734723043
// Prints
<garbage>
Run Code Online (Sandbox Code Playgroud) 我正在使用Ubuntu 16服务器进行测试php7.1.我的一个应用程序使用bcadd功能.我知道我需要为此安装bcmath模块,但我无法找到php7.1-bcmath.当我尝试安装时apt install php-bcmath,它只是安装了php7.0-bcmath模块.
我无法php7.1-bcmath在我的服务器上随处找到模块.有人有想法吗?
apt install php7.1-bcmath 返回以下,
E: Unable to locate package php7.1-bcmath
E: Couldn't find any package by glob 'php7.1-bcmath'
E: Couldn't find any package by regex 'php7.1-bcmath'
Run Code Online (Sandbox Code Playgroud) 我需要启用BC Math,但我不想使用--enable-bcmath,主要是因为我不理解这条路线.
有没有办法只使用php.ini来做到这一点?
我正在尝试在 App Engine flex 环境中实现 Google 的文本转语音 API,但出现此错误:
“PHP 消息:PHP 致命错误:未捕获错误:调用 /app/web/vendor/google/protobuf/src/Google/Protobuf/Internal/Message.php:941 中未定义的函数 Google\Protobuf\Internal\bccomp()”
一旦我通过在我的composer.json中要求BCmath()解决了问题
{
"require": {
"ext-bcmath": "*",
"google/cloud-text-to-speech": "^1.0",
"google/gax": "^1.3",
"grpc/grpc": "^1.4",
"google/auth": "^1.8",
"phpseclib/phpseclib": "^2.0",
"google/protobuf": "^3.11"
}
}
Run Code Online (Sandbox Code Playgroud)
然后重新安装 /vendor 后我无法摆脱错误消息。我尝试通过运行来安装 BCmath 扩展
sudo apt install php7.2-bcmath
Run Code Online (Sandbox Code Playgroud)
但它说扩展已经安装。我也运行这个 php -i | grep -i bcmath 并收到此消息
/etc/php/7.2/cli/conf.d/20-bcmath.ini,bcmath BCMath 支持 => 启用 bcmath.scale => 0 => 0
bccomp() 的测试
php -r "echo bccomp('1', '2');"
Run Code Online (Sandbox Code Playgroud)
我按预期得到“-1”。看起来该功能有效。
我什至尝试在 php.ini 中启用 BCmath 扩展
extension=bcmath.so
Run Code Online (Sandbox Code Playgroud)
我将 .ini 文件放在与 /vendor 和 …
php google-app-engine bcmath google-text-to-speech composer-php
安装"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
bcmath ×10
php ×10
gmp ×2
biginteger ×1
ceil ×1
composer-php ×1
floor ×1
largenumber ×1
module ×1
nginx ×1
php-7.1 ×1
random ×1
rounding ×1
scale ×1
ubuntu-16.04 ×1