gpt4 book ai didi

php - Bcmul 报告 0

转载 作者:搜寻专家 更新时间:2023-10-31 20:41:04 29 4
gpt4 key购买 nike

我有一段简单的代码如下。

$amount = 447274.44882;
$rate = 0.00001;

echo floatNumber(bcmul($amount, $rate, 8), 8);

当它应该是 4.47274449 时输出 0.00000000。如果我将比率更改为 0.0001,那么它会输出正确的数字,任何高于 4 位小数的数字都会报告 0。

我是不是做错了什么,或者这是一个已知的限制还是什么?如果是这样的话,这似乎是一个很大的问题。

最佳答案

如果您使用默认设置将 0.00001 转换为字符串(这就是如果您将 bcmulexpects strings 开始用 float 喂养时会发生的情况)您将得到这个:

var_dump( (string)0.00001 );
string(6) "1.0E-5"

它没有明确记录,但 bcmath 函数显然 return 在面对无效输入时强制转换为零:

var_dump( bcadd('Hello', 'world!', 8) );
var_dump( bcadd('33', 'Foo', 8) );
var_dump( bcdiv('33', 'Foo', 8) );
string(10) "0.00000000"
string(11) "33.00000000"
Warning: bcdiv(): Division by zero
NULL

任意精度库的整体思想是克服基数 2 算术和固定大小存储的限制。因此你需要这个:

var_dump( bcmul('447274.44882', '0.00001', 8) );
string(10) "4.47274448"

这对于用 100 位数字进行数学计算非常有用,但对于简单的舍入不是特别有用。事实上,扩展根本不舍入——它只是截断:

var_dump( bcmul('20.01', '1.444', 3) );
var_dump( bcmul('20.01', '1.444', 2) );
var_dump( bcmul('20.01', '1.444', 1) );
var_dump( bcmul('20.01', '1.444', 0) );
string(6) "28.894"
string(5) "28.89"
string(4) "28.8"
string(2) "28"

关于php - Bcmul 报告 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609030/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com