php 浮点型转整型,解决php使用intval将浮点数转成整型时出现精度失真的问题

最近在写一个抽奖功能时出现了将浮点数转成整型时出现了精度失真的问题

问题复现:$test = 1.14;

echo $test * 100;//打印浮点数

echo '
';

echo intval($test *100);//将浮点数转化成整型

打印出来的信息为:114

113

如上就出现了精度失真的问题了,那么如何解决上面的问题呢?

1:将浮点数转成字符型然后再转为整型

如:$test = 1.14;

echo $test * 100;//打印浮点数

echo '
';

echo intval(strval($test * 100));//将浮点数转成字符串型然后转成整型

打印出来的信息为:114

114

2:使用高精度函数实现

如:$test = 1.14;

echo $test * 100;//打印浮点数

echo '
';

echo bcmul($test,  100);//使用高精度函数bcmul实现将参数一乘以参数二

打印出来的信息为:114

114

其他常见的高精度函数有:

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

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

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

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

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

bcmod — 求高精度数字余数

bcpow — 求高精度数字乘方

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

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

bcsqrt — 求高精度数字平方根

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值