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

18-05-11 15:03 2834 1 2 已编辑

计算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',然后就能得到请正确的结果了。

叶秋
叶秋 PHPer @ 无 声望
知我者谓我心忧,不知我者喋喋不休。
2 人点赞
Up骚年 Blue
1 条评论
排序方式 时间 投票
Up骚年
举报 #1

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

请登录后发表评论