解决PHP的bcmul函数计算结果不对的问题

18-05-11 15:03 字数 462 阅读 9083 已编辑

计算100万分之1乘以100万,使用bcmul函数。

var_dump(bcmul(0.000001, 1000000));

很简单的计算,结果应该是1,但是程序运行之后发现结果并不是1,而是0

如果想得到正确的结果你可能需要这样处理一下。

var_dump(bcmul(sprintf('%.6f', 0.000001), 1000000));

先把浮点数格式化为带6位小数的字符串类型,然后才能得到正确的结果。

为什么呢?

通过官方文档你会发现bcmul要的是两个字符串类型的参数。

bcmul

于是尝试把浮点型转为string类型。

var_dump(bcmul((string)0.000001, (string)1000000));

但是你发现这并没有什么luan用,结果还是0。

最后

通过var_dump((string)0.000001);你会发现得到的结果并不是 '0.000001' ,而是 '1.0E-6'

也许问题就出现在这里,所以需要用sprintf函数先把浮点型的1.000000转换为字符串的'1.000000',然后就能得到请正确的结果了。

2人点赞>
关注 收藏 改进 举报
3 条评论
排序方式 时间 投票
Up骚年

直接加个单引号就行了吧?

zysafe
主要考虑变量传入的情况呀
Up骚年
回复 zysafe: 可以用 strval 把传进来的变量转成字符串
请登录后发表评论