我无法让 bcmath 在我的服务器 php 7.1、ubuntu 18 上使用基于比特币的分数。查看以下代码
bcscale(8);
$x1 = bcsub(0.04217 ,0.00007, 8);
$x2 = 0.04217 - 0.00007 ;
dd($x1 , $x2);
结果
"0.04217000"
0.0421
如您所见,bcmath get 返回第一个操作数并添加了一些零??。有任何想法吗?
该手册有点微妙,但参数应该是字符串。如果你让它们成为字符串,它会起作用。
bcscale(8);
$x1 = bcsub('0.04217' ,'0.00007', 8);
$x2 = 0.04217 - 0.00007 ;
echo 'x1 = '. $x1 . PHP_EOL;
echo 'x2 = '. $x2;
结果
x1 = 0.04210000
x2 = 0.0421
也来自手册
注意 由于 PHP 将浮点值转换为字符串的方式,即字符串可能采用指数表示法(BCMath 不支持),将浮点类型的值传递给期望字符串作为操作数的 BCMath 函数可能不会产生预期的效果,并且小数点分隔符依赖于语言环境(而 BCMath 总是需要一个小数点)。
至于精度,
bcscale(8);
$x1 = bcsub('0.04217' ,'0.00007', 6);
// ^
$x2 = 0.04217 - 0.00007 ;
echo 'x1 = '. $x1 . PHP_EOL;
echo 'x2 = '. $x2;
结果
x1 = 0.042100
x2 = 0.0421
和
bcscale(8);
$x1 = bcsub('0.04217' ,'0.00007', 4);
// ^
$x2 = 0.04217 - 0.00007 ;
echo 'x1 = '. $x1 . PHP_EOL;
echo 'x2 = '. $x2;
结果
x1 = 0.0421
x2 = 0.0421