首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果将指数位传递给它的函数,PHP BCMath就不能处理它的指数数,BCMath返回“bcmath参数不是格式良好的”。

如果将指数位传递给它的函数,PHP BCMath就不能处理它的指数数,BCMath返回“bcmath参数不是格式良好的”。
EN

Stack Overflow用户
提问于 2021-03-18 12:33:39
回答 1查看 5K关注 0票数 1

我研究的是几个小数小数,比如0.0000687,0.0000063241,0.0000454。我使用BCMath来获得最精确的结果,因为它涉及到金钱的计算,到目前为止,BCMath对于修复我之前遇到的错误非常有帮助。但是我发现,如果将由PHP自动转换的指数值传递给BCMath,那么BCMath就不能很好地工作。下面是示例代码:

代码语言:javascript
复制
 $x = 0.00002123; // let say I got this value from the other computation;
                  // this $x value will automatically turn to exponential 
                  //  value by php because it have few of leading 0 after the '.' 

PHP开始将其实数转换为指数数的模式是:(参见下面的图像)

从上面的图像中可以看到,当前面的0位数是4倍-> 0.0000xxxxx ( PHP开始转换为指数的模式)时,PHP开始将实数转换为指数数的模式。

然后,假设这个变量$x将被计算成PHP函数中的一个:

代码语言:javascript
复制
# First, I work with float number 

$calculation1 = bcadd($x,5,12); // adding variable $x to 5 
$calculation2 = bcmul($x,4,12); // multiply variable $x to 4
$calculation3 = bcdiv($x,5,12); // divide variable $x to 5
 
# Second, I tried to work with string number

$y = (string) $x;
$calculation4 = bcadd($y,5,12);
$calculation5 = bcmul($y,4,12);
$calculation6 = bcmul($y,4,12);

结果是错误,这里是变量$x的屏幕截图:

这里的结果是错误,这里是变量$y的屏幕截图(先传递到字符串,因为BCMath很好地处理字符串):

重要备注

  • 因此,当使用指数值时,BCMath会出现问题,我无法避免这个指数值,因为当它到达其模式时,它会自动地将其解析为指数数(可以看到上面所附的图像)。
  • 考虑到变量$x是从不同的计算中得到的,所以在实际代码中,我不能按照我想要的方式对它进行硬编码。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-18 13:04:38

PHP中的bcmath函数可以处理数字字符串。不浮动,更重要的是,不浮动已经转换成字符串。这是在引申导论中提到的

有效(亦称。BCMath数字是与正则表达式/^[+-]?[0]*[1-9]*[.]?[0-9]*$/匹配的字符串。

在PHP中将浮点数转换为字符串通常会给出一个科学表示法的结果--您在结果中看到的2.123E-5语法。bcmath不能使用此表示形式;要匹配上面的正则表达式,字符串必须包含十进制形式的参数。

您所看到的警告是在PHP7.4中添加的,并在该版本的向后不兼容的变化页面中列出。以前,任何格式不佳的参数都会被默默地解释为零(这并没有多大帮助)。

正如注释中提到的,将浮点数转换为其十进制形式的最简单方法是使用number_format,提供与bc函数已经使用的相同的精度:

代码语言:javascript
复制
$precision = 12;
$x = 0.00002123;
echo bcadd(number_format($x, $precision), 5, $precision);

5.000021230000

请参阅https://3v4l.org/SuWIu

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66691177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档