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.79999999999999990.51.5可以用浮点数精确的表示。0.1的二进制:符号位0指数01111011(-4)位数1.10011001100110011001101(1.60000002384185791015625)将这个数在转回十进制:0.100000001490116120.7的二进制:符号位0指数01111110(-1)位数1.01100110011001100110011(1.39999997615814208984375)将这个数在转回十进制:0.699999988079071
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
先去百度一下浮点数用二进制是怎么表示的,就明白为什么有些浮点数用二进制表示的话为什么总是小于实际的浮点数,有些浮点数的二进制是正确。比如:0.7实际二进制表示的是0.69999999999999996,而0.5的二进制还是二进制,
添加回答
举报
0/150
提交
取消