php中intval(0.58*100) 为啥输出 57\n?
【php中intval(0.58*100) 为啥输出 57\n?】 浮点数在计算机里面的计算是不精确的,本身是二进制的问题,二进制永远不能精确的表示出一个十进制的小数出来,具体原因你可以去百度找找资料,你可以看看十进制转二进制是怎么转的,浮点数是怎么转的,计算机里浮点数是用不精确的二进制计算之后再转成十进制给你看,有误差的
■网友
PHP 的 Manual 里有写,是 intval() 这个函数的问题,采用的是“截断”法取整。其实如果你直接输出 0.57*100 结果是正确的。intval converts doubles to integers by truncating the fractional component of the number. When dealing with some values, this can give odd results. Consider the following: print intval ((0.1 + 0.7) * 10); This will most likely print out 7, instead of the expected value of 8. For more information, see the section on floating point numbers in the PHP manual (http://www.php.net/manual/language.types.double.php) 解决方法:intval(strval(0.57*100)); // 57
■网友
这个问题我也被坑过,改成intval(0.58*10000)/100试试
■网友
浮点数运算都会这样。
■网友
浮点数溢出了
■网友
先转为str型,再转回int型。试试(int)(string)($data*100)
■网友
consider intval(round(0.58*100))
■网友
和浮点数的特点有关系,浮点数的存储不是我们平时见到的样子,0.58,存起来依旧有一堆后缀,建议找一本计算机体系结构看看
推荐阅读
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 新互联网网站用Java还靠谱么对比Php,Python,Ruby的话
- 求助!PHP开发,怎么样才能具备在有千万级流量网站开发环境下的基本工作能力
- PHP程序员岗位招聘面试题有哪些
- 趣头条|个性好选择 现代索纳塔厂商指导价16.18-20.58万元
- 2017年各种语言的就业形势怎样(Android,iOS,PHP,Java,前端)
- Discuz、PHPWind之类BBS程序哪个运行打开最高效
- 为啥PHP社区鲜有异步队列,分布式计算,数据分析的项目和讨论
- 怎样看待起点中文网把个人中心全换成php了
- php程序员,是应该找个外包公司锻炼自己,还是找个互联网公司共同发展
