跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • PHP 浮点数,为什么 1890 / 100 * 100 结果为正确值 1890,但是 floor(1890 / 100 * 100)结果为 1889?
未分類
21 2 月 2021

PHP 浮点数,为什么 1890 / 100 * 100 结果为正确值 1890,但是 floor(1890 / 100 * 100)结果为 1889?

PHP 浮点数,为什么 1890 / 100 * 100 结果为正确值 1890,但是 floor(1890 / 100 * 100)结果为 1889?

資深大佬 : UnrealEngine 6

我知道 php 浮点数有对应的计算函数,但是上面这个例子还是不知道原因

大佬有話說 (11)

  • 資深大佬 : zpfhbyx

    bcmath 处理这个问题, 然后这个不是 php 的问题,都有这个问题,Google 一下 浮点数陷阱

  • 資深大佬 : msg7086

    因为计算结果是 1889.9999 你 floor 一下当然就把 0.9999 干掉了。

  • 資深大佬 : markgor

    你看似有穷的小数, 在计算机的二进制表示里却是无穷的

    var_dump((1890/100*100) == 1890);//<====false
    var_dump(1890/100*100);//float
    var_dump(1890);//int

    你可以把他们转为 2 进制,再转回 10 进制看过程

  • 資深大佬 : weirdo

    浏览器打开 console
    输入 1890/100*100 回车

  • 資深大佬 : zagreb

    是不是要这样取整?
    floor(x – 0.5) + 1

  • 資深大佬 : zagreb

    @zagreb
    哦。有 round() 函数。

  • 資深大佬 : JJstyle

    “为什么 1890 / 100 * 100 结果为正确值 1890” 就不对

    > 1890/100 * 100
    > 1889.9999999999998

  • 資深大佬 : Phariel

    IEEE 754 好好学习一下

  • 資深大佬 : dongisking

    这个是精度损失的问题,必须用 bcmath 。
    https://www.cnblogs.com/datang6777/p/7049159.html

  • 資深大佬 : wh1012023498

    IEEE754 标准, 遵循这个标准的都有这个问题。

  • 資深大佬 : sorshion

    https://www.laruence.com/2013/03/26/2884.html

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具