美文网首页
为什么PHP下,intval(0.58*100)输出 57

为什么PHP下,intval(0.58*100)输出 57

作者: 鹰击长空_1cec | 来源:发表于2019-06-10 11:58 被阅读0次

按照正常思维输出58 ,但是运行结果是57,然后在尝试

intval(0.68*100)输出 68

intval(0.56*100)输出 56

intval(0.57*100)输出 56

intval(0.58*100)输出 57

intval(0.59*100)输出 59

为什么只是0.57*100和0.58*100会特殊呢?

首先我们来看intval()在PHP 的 Manual 里有写,是 intval() 这个函数的问题,采用的是“截断”法取整。

这个问题看似奇特,其实还是浮点数的精度的问题,0.58*100 的结果是什么?其实大家试试就知道了,并不是想象中的 58,而是 57.99999999999999,为什么会这样 我们先来说下计算机中保存浮点数 不能精确表示,本篇可能比较烧脑子,我会尽量用最通俗的语言,最贴近现实的例子来讲解,不在乎篇幅有多长,关键是要给大家讲明白。下一篇,你将了解到浮点数如何工作,以及为什么很多数 不能表示。

热身 —— 问:要把小数装入计算机,总共分几步?你猜对了,3 步。

• 第一步:转换成二进制

• 第二步:用二进制科学计算法表示

• 第三步:表示成 IEEE 754 形式

在上面的第一步和第三步都有可能 丢失精度。

下面我们讨论如何把十进制小数转换成二进制小数(什么?你不会?请自觉去面壁)。考虑我们将 1/7(七分之一) 写成小数的时候是如何做的?用 1 除以 7,得到的商就是小数部分,剩下的余数我们继续除以 7,一直除到什么时候结束呢? 有两种情况:

1. 如果余数为 0。yeah!终于结束了,洗洗睡吧

2. 当除到某一步时,余数等于 1… 停!stop!等一下,我发现有什么地方怪怪的。余数为 1,余数如果为 1 的话,再继续除下去,不就又是 1/7 了吗?绕了一个大弯,又回来了?对,你猜的很对,它永远不会结束,它循环了。注意我上面说的 情况2,我们判断他循环,并 不是从直观看感觉它重复了,而是因为在计算过程中,它又回到了开头。为什么这么说呢?当你计算一个分数时,它总是连续出现 5,出现了好多次,例如 0.5555555… 你也无法断定它是无限循环的,比如 一亿分之五

其实 0.58*100 = 57.99999999999999 是不局限于任何语言的,是 IEEE 规定的浮点数的运算标准。一般情况下,57.99999999999999 会四舍五入到 58。需要注意的是,浮点数的四舍五入和咱们普通的数学里面的也是不同的,浮点数遇到 5 后,不一定总是入,有时也舍。

为什么结果是 57 呢,主要是因为 intval 函数的规则是,从第一个数字开始,直到遇到不是数字的字符,结束。

相关文章

  • 为什么PHP下,intval(0.58*100)输出 57

    按照正常思维输出58 ,但是运行结果是57,然后在尝试 intval(0.68*100)输出 68 intval(...

  • PHP的intval函数的运行机制,intval(0.58*10

    今天千锋PHP的学员去面试,其中一道面试题是echo intval(0.58*100) 输出多少,为什么? 按照正...

  • 2018-03-19 PHP笔试题

    01)下面的输出结果:(参考: http://php.net/manual/zh/function.intval....

  • PHP变量

    为何输出10,而非100?全局变量和局部变量问题 输出10 输出100 输出1、b 输出3、b PHP变量 PHP...

  • php intval(float)

  • PHP高精度函数

    平时在做开发的时候,会遇到计算结果出错的问题,明明计算的方法正确,但结果不对。 比如0.58*100,得到的是57...

  • PHP intval()整型转换函数

    用法 intval:获取变量的整数值 语法 通过使用指定的进制base转换(默认是十进制),返回变量var的int...

  • 小数取整

    1.丢弃小数部分,保留整数部分php: intval(7/2)js:parseInt(7/2)2.向上取整,有小数...

  • php命令行加载的php.ini

    php -c 指定配置php -m 查看加载的php插件php -i 命令行下输出phpinfo。 php命令行模...

  • PHP进度条

    假设用户上传一个100行文件,PHP遍历写入数据库,并且显示当前执行的百分比. 正常情况下,PHP有个自己的输出缓...

网友评论

      本文标题:为什么PHP下,intval(0.58*100)输出 57

      本文链接:https://www.haomeiwen.com/subject/wpzaxctx.html