-1

我无法让 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 返回第一个操作数并添加了一些零??。有任何想法吗?

4

1 回答 1

3

该手册有点微妙,但参数应该是字符串。如果你让它们成为字符串,它会起作用。

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
于 2019-02-05T11:33:25.183 回答