永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
侧边栏壁纸
  • 累计撰写 190 篇文章
  • 累计收到 28 条评论
php

永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。

五好
2020-05-26 / 2 评论 / 4,442 阅读 / 正在检测是否收录...

今天碰到一个奇葩的事情:

用户有书币888 看一本刚好需要 8.88元的书
然而看不了,提示需要充值。怎么能这么不要脸呢,明显可以看阿,这不科学阿,然而这却是真实的,测试居然真和用户反馈一样,不是说好的PHP是弱类型语言吗?

现在把过程写一下:

   $a=把钱转书币  8.88*100
   $b=账户余额 888

比较$a和$b 的大小

if($b>=$a){可以看}else{不可以看,跳充值页面}

奇葩的是 这里 会跳到{不可以看,跳充值页面} 这里的代码块。这里为什么会出现这种情况呢?
其他过程不说了, 就列出关键的判断
var_dump($b) 和 var_dump($a) 分别打印出来 就知道为什么了。

结果为:int(888) float(888) 

这里的解决办法是 把 float 转成int

$a=intval($a);

这样问题就解决了。
再看看 PHP 的 float 的文档 https://www.php.net/manual/zh/language.types.float.php
真是学艺不精阿。

0

评论 (2)

取消
  1. 头像
    MartinNeile
    Windows 10 · MicroSoft Edge

    It is very nice to read your site, thank you very much for your work, it's great!

    回复
  2. 头像
    nery
    Windows 7 · Google Chrome

    nice啊,好好,又涨知识了。

    回复