前段日子,组长在写一个学科测试的排名逻辑,也不知怎么的,就涉及了大量的小数运算,可能乘上一个小数,然后再除了很大的数字,但是最后的结果,php只给了一个整数,而忽略了小数。然后组长问我,我也一脸懵逼的。于是从网上找呀找,得知高精度运算时,可以使用bc库带的一些高精度的运算方法,如下:(复制过来的)
bcadd — 将两个高精度数字相加
bccomp — 比较两个高精度数字,返回-1, 0, 1
bcdiv — 将两个高精度数字相除
bcmod — 求高精度数字余数
bcmul — 将两个高精度数字相乘
bcpow — 求高精度数字乘方
bcpowmod — 求高精度数字乘方求模,数论里非常常用
bcscale — 配置默认小数点位数
bcsqrt — 求高精度数字平方根
bcsub — 将两个高精度数字相减
于是我自己做了一些测试,如下:
可以看到的是,当php的浮点数长度装不下这串数字时,自动转换成了字符串类型。
这里我总结了几个点:
bc等函数的第三个参数,用来控制小数点后的位数