我对 BIG 数字有一个小问题,其中 BC 数学函数bcdiv
总是在非零结果上返回零。
例如 :
echo bcdiv(40075036, 86164.098903691, 40);
与传统方法相比:
echo (40075036/86164.098903691);
我不确定为什么会出现差异。BC 数学函数是否仅适用于字符串,如果是这样,我如何事先将 int 值转换为字符串(首选内联表示法,例如(int)$myvar;
)---如果这是问题所在。
该问题的解决方案如下:
bcmath操作仅适用于字符串。您不能将任何其他类型的数据作为参数传递,因为除非值是(字符串),否则它不会进行任何计算。
该组函数不会自动将数据转换或强制转换为字符串,如果传递其他数据类型,则不会返回任何错误。
要传递以整数、浮点数等形式存储的数据,以下代码将根据需要对变量数据进行动态转换:
bcdiv((string)40075036, (string)86164.098903691, (string)40);
或者
$num1 = 12345;
$num2 = 45678;
$digits = 40;
bcdiv((string)$num1, (string)$num2, (string)$digits);
如果数字在您通过之前是固定的并且已知(也就是它们不是来自数据库,也不是预先计算的),那么您应该使用以下函数:
bcdiv('40075036', '86164.098903691', '40');
使用“bcscale”函数 - 为所有 bc 数学函数设置默认比例参数。前任。:
bcscale(40);
echo bcdiv(40075036, 86164.098903691);
它对我有用。(PHP 7.1)