php数字精度问题

  1. 不要用浮点数进行比较和数学运算转化为整型运算
var_dump((0.1 + 0.7) == 0.8);//boolean false
var_dump((0.1 + 0.7) * 10 == 0.8 * 10);//boolean false
var_dump((0.1 + 0.7) * 100 == 0.8 * 100);//boolean true
echo intval(0.58 * 100);//57
echo intval(0.58 * 1000);//580
  1. 试用bcmath库(php自带)
var_dump(bcadd(0.1, 0.7, 1) == 0.8);//boolean true

bcadd — 将两个高精度数字相加

bccomp — 比较两个高精度数字,返回-1, 0, 1

bcdiv — 将两个高精度数字相除

bcmod — 求高精度数字余数

bcmul — 将两个高精度数字相乘

bcpow — 求高精度数字乘方

bcpowmod — 求高精度数字乘方求模,数论里非常常用

bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”

bcsqrt — 求高精度数字平方根

bcsub — 将两个高精度数字相减

你可能感兴趣的:(php数字精度问题)