为了账号安全,请及时绑定邮箱和手机立即绑定

关于PHP浮点数精度问题

关于PHP浮点数精度问题

千万里不及你 2019-04-16 20:25:51
PHPmanual中说:以十进制能够精确表示的有理数如0.1或0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。//example1$float=(0.1+0.7)*10;echo(integer)$float;//7echofloor($float);//7//example2echo(integer)(1.5+1.5);//3echofloor(1.5+1.5);//3//example3echo(integer)(0.5*10);//5echofloor(0.5*10);//5为什么在例子2和例子3中,浮点数的加和乘运算能够保全精度呢?
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

又是献上我博客的时候了:
代码之谜(四)-浮点数(从惊讶到思考)
代码之谜(五)-浮点数(谁偷了你的精度?)
0.1+0.7的结果是0.7999999999999999
0.51.5可以用浮点数精确的表示。
0.1的二进制:
符号位0
指数01111011(-4)
位数1.10011001100110011001101(1.60000002384185791015625)
将这个数在转回十进制:0.10000000149011612
0.7的二进制:
符号位0
指数01111110(-1)
位数1.01100110011001100110011(1.39999997615814208984375)
将这个数在转回十进制:0.699999988079071
                            
查看完整回答
反对 回复 2019-04-16
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

先去百度一下浮点数用二进制是怎么表示的,就明白为什么有些浮点数用二进制表示的话为什么总是小于实际的浮点数,有些浮点数的二进制是正确。比如:0.7实际二进制表示的是0.69999999999999996,而0.5的二进制还是二进制,
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 328 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信