关于PHP浮点数精度问题

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

繁星coding

又是献上我博客的时候了:代码之谜(四)-浮点数(从惊讶到思考)代码之谜(五)-浮点数(谁偷了你的精度?)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的猫

先去百度一下浮点数用二进制是怎么表示的,就明白为什么有些浮点数用二进制表示的话为什么总是小于实际的浮点数,有些浮点数的二进制是正确。比如:0.7实际二进制表示的是0.69999999999999996,而0.5的二进制还是二进制,
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript