为什么Bcmath返回无结果的结果

时间:2019-02-05 11:23:57

标签: php bcmath

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

1 个答案:

答案 0 :(得分: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将float值转换为字符串的方式,即将float类型的值传递给期望将字符串作为操作数的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