php manual中说:
以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。
// example1 $float = (0.1 + 0.7) * 10; echo (integer) $float; // 7 echo floor($float); // 7 // example2 echo (integer) (1.5+1.5); // 3 echo floor(1.5+1.5); // 3 // example3 echo (integer) (0.5*10); // 5 echo floor(0.5*10); // 5
为什么在例子2和例子3中,浮点数的加和乘运算能够保全精度呢?
回复内容:
php manual中说:
以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。
// example1 $float = (0.1 + 0.7) * 10; echo (integer) $float; // 7 echo floor($float); // 7 // example2 echo (integer) (1.5+1.5); // 3 echo floor(1.5+1.5); // 3 // example3 echo (integer) (0.5*10); // 5 echo floor(0.5*10); // 5
为什么在例子2和例子3中,浮点数的加和乘运算能够保全精度呢?
又是献上我博客的时候了:
立即学习“PHP免费学习笔记(深入)”;
- 代码之谜(四)- 浮点数(从惊讶到思考)
- 代码之谜(五)- 浮点数(谁偷了你的精度?)
0.1 + 0.7 的结果是 0.7999999999999999
在原版的基础上做了一下修正:增加1st在线支付功能与论坛用户数据结合,vip也可与论坛相关,增加互动性vip会员的全面修正评论没有提交正文的问题特价商品的调用连接问题删掉了2个木马文件去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正定单不能删除问题VIP出错问题主题添加问题商家注册页导航连接问题添加了导航FLASH源文
0.5 1.5 可以用浮点数精确的表示。
0.1 的二进制:
符号位 0 指数 01111011 (-4) 位数 1.10011001100110011001101 (1.60000002384185791015625)
将这个数在转回十进制:0.10000000149011612
0.7 的二进制:
符号位 0 指数 01111110 (-1) 位数 1.01100110011001100110011 (1.39999997615814208984375)
将这个数在转回十进制:0.699999988079071










