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